Java onItemSelected Listner不是数据库中长字符串数组的触发器

Java onItemSelected Listner不是数据库中长字符串数组的触发器,java,android,android-spinner,Java,Android,Android Spinner,更新: 我发现了这个问题,这个问题可能是由从SQL requset获取适配器内容引起的。现在我在这里发布我的getLockerList()代码 我用长字符串测试了这个函数 "asdajdnajkdaadasdaajd najkdaadasdaajdnajkdaadasdaajdnajkdaadasdaajdnaj kdaadasdaajdnajkdaadasdasdas" 而且它仍然可以完美地工作,所以现在我想问题来自于我得到数据的时候 我用arrayadapter设置了一个旋转器。适配器的内

更新:

我发现了这个问题,这个问题可能是由从SQL requset获取适配器内容引起的。现在我在这里发布我的getLockerList()代码

我用长字符串测试了这个函数

"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()部分。现在我把它贴出来了。