onItemSelected Listner не запускается с длинным массивом String из базы данных - PullRequest
0 голосов
/ 16 января 2020

ОБНОВЛЕНИЕ:

Я обнаружил проблему, проблема может быть вызвана получением содержимого адаптера из набора настроек SQL. Теперь я публикую здесь свой код getLockerList ().

Я протестировал функцию с длинной строкой

"asdajdnajkdaadasdaajd najkdaadasdaajdnajkdaadasdaajdnajkdaadasdaajdnaj kdaadasdaajdnajkdaadasdasdas"

, и она все еще могла работать отлично, так что теперь я предполагаю, что проблема возникает, когда Я получил данные.

Я установил счетчик с помощью arrayadapter. Содержимое адаптера взято из запроса MySQL.

Я получил данные и успешно создал адаптер, но когда я пытаюсь показать, какой элемент был выбран пользователем, он ничего не показывает после нажатия на элемент.

Я попытался добавить системную распечатку, чтобы выяснить проблему, в конце концов я обнаружил, что проблема в том, что слушатель даже не вызывает вызов, независимо от значения onItemSelected или onNothingSelected

Я думаю, что могу найти проблема сейчас, мой список просмотра хранится в другом месте, который очень длинный String. Я попытался изменить содержимое адаптера на «тест», и он работает отлично. Теперь проблема в том, могу ли я отобразить длинную строку?

Вот мой код:

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();
    }

}

1 Ответ

0 голосов
/ 16 января 2020

Я решил проблему.

Я не знаю, каково это понятие. Но если я добавлю еще один элемент в массив, независимо от того, является ли элемент "" (просто пустым / ничего внутри) или "@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@ "

Программа станет работать отлично.

Поэтому я просто добавляю один locker_list.add(""); перед созданием адаптера.

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);
    }
...