Java onItemSelected Listner不是数据库中长字符串数组的触发器
更新: 我发现了这个问题,这个问题可能是由从SQL requset获取适配器内容引起的。现在我在这里发布我的getLockerList()代码 我用长字符串测试了这个函数Java onItemSelected Listner不是数据库中长字符串数组的触发器,java,android,android-spinner,Java,Android,Android Spinner,更新: 我发现了这个问题,这个问题可能是由从SQL requset获取适配器内容引起的。现在我在这里发布我的getLockerList()代码 我用长字符串测试了这个函数 "asdajdnajkdaadasdaajd najkdaadasdaajdnajkdaadasdaajdnajkdaadasdaajdnaj kdaadasdaajdnajkdaadasdasdas" 而且它仍然可以完美地工作,所以现在我想问题来自于我得到数据的时候 我用arrayadapter设置了一个旋转器。适配器的内
"asdajdnajkdaadasdaajd najkdaadasdaajdnajkdaadasdaajdnajkdaadasdaajdnaj kdaadasdaajdnajkdaadasdasdas"
而且它仍然可以完美地工作,所以现在我想问题来自于我得到数据的时候
我用arrayadapter设置了一个旋转器。适配器的内容来自MySQL请求
我获得了数据并成功创建了适配器,但当我尝试显示用户选择的项目时,单击该项目后,它什么也不显示
我试着添加一些系统打印来找出问题,最后我发现问题在于侦听器甚至没有调用,无论是onItemSelected还是onNothingSelected
我想我现在可能会发现问题,我的视图列表存储在不同的位置,这是一个很长的字符串。我尝试将适配器的内容更改为“test”,它工作得非常好。现在的问题是,我可以显示长字符串吗 这是我的密码:
public class PlaceOrderActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
private Spinner from_spinner;
private ArrayList<String> locker_list = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_place_order);
getLockerList();
from_spinner = (Spinner) findViewById(R.id.from_spinner);
from_spinner.setVisibility(View.VISIBLE);
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,locker_list);
from_spinner.setAdapter(adapter);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
from_spinner.setOnItemSelectedListener(this);
}
private void getLockerList() {
// Response received from the server
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonResponse = new JSONArray(response);
//JSONObject jsonObject = jsonResponse.getJSONObject(0);
if (jsonResponse!=null) {
// System.out.println(jsonResponse);
for (int i=0;i< jsonResponse.length();i++)
{
JSONObject jsonObject = jsonResponse.getJSONObject(i);
String location = jsonObject.getString("location1")+" "+jsonObject.getString("location2")+" "+jsonObject.getString("location3");
locker_list.add(location);
}
} else {
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
Response.ErrorListener errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println(error);
}
};
getLoockerLocationRequest request = new getLoockerLocationRequest(responseListener,errorListener);
RequestQueue queue = Volley.newRequestQueue(PlaceOrderActivity.this);
queue.add(request);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
System.out.println("selected item");
Toast.makeText(parent.getContext(),from_spinner.getSelectedItem().toString(),
Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
System.out.println("nothing select");
String no_selected_value = "Select the location";
Toast.makeText(parent.getContext(),no_selected_value,
Toast.LENGTH_SHORT).show();
}
}
公共类PlaceOrderActivity扩展AppCompativeActivity实现AdapterView.OnItemSelectedListener{
_Spinner的私有微调器;
private ArrayList locker_list=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u place\u order);
getLockerList();
from_spinner=(spinner)findViewById(R.id.from_spinner);
来自_spinner.setVisibility(View.VISIBLE);
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u spinner\u项目,locker\u列表);
来自_spinner.setAdapter(适配器);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
从_spinner.setOnItemSelectedListener(此);
}
私有无效getLockerList(){
//从服务器收到的响应
Response.Listener responseListener=新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONArray jsonResponse=新的JSONArray(响应);
//JSONObject JSONObject=jsonResponse.getJSONObject(0);
if(jsonResponse!=null){
//System.out.println(jsonResponse);
for(int i=0;i
我解决了这个问题
我不知道它的概念是什么。但是,如果我在arraylist中添加一个额外的项目,无论该项目是“”(仅为空/内部无任何内容)还是“@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
该程序将变得可以完美运行
所以我只添加了一个locker\u列表代码>在适配器创建之前
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_place_order);
locker_list.add("");
getLockerList();
from_spinner = (Spinner) findViewById(R.id.from_spinner);
from_spinner.setVisibility(View.VISIBLE);
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,locker_list);
from_spinner.setAdapter(adapter);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
from_spinner.setOnItemSelectedListener(this);
}
代码看起来不错。你在模拟器上测试这个吗?此注释提到类似的问题发生在模拟器上,但在实际设备上没有。我想我现在可能会发现问题,我的视图列表存储在不同的位置,这是一个很长的字符串。我尝试将适配器的内容更改为“test”,它工作得非常好。现在的问题是,我可以显示长字符串吗?我没有跟随。您发布的文章中是否缺少一些代码?另外,在onItemSelected中,您可以更改为Toast.makeText(这是locker\u list.get(position),Toast.LENGTH\u SHORT)。show()@MattRobertson是的,我还没有发布getLockerList()部分。现在我把它贴出来了。