Добавить значения в спиннер из ArrayList - PullRequest
0 голосов
/ 29 августа 2018

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

Мой php работает нормально и возвращает имена, однако я не могу понять проблему с моим кодом. Файл php возвращает имена, но я не могу добавить их в счетчик:

public void setUpWaiterSpinner() {
        final ArrayList<String> listWaiters = new ArrayList<String>();
        String url = "hidden";
        StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject obj = new JSONObject(response);
                    JSONArray array = obj.getJSONArray("waiters");

                    for (int i = 0; i < array.length(); i++) {
                        final JSONObject orderObj = array.getJSONObject(i);
                        String waiterName = orderObj.getString("name");
                        listWaiters.add(waiterName);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(OrderConfirm.this, "Oops!" +error.toString(), Toast.LENGTH_LONG).show();
            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {

                Map<String, String> params = new HashMap<>();
                params.put("table", "0");
                return params;
            }

        };

        MySingleton.getInstance(this).addToRequestQueue(stringRequest);
        ArrayAdapter<String> waiter_adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, listWaiters);
        WaiterSpinner.setAdapter(waiter_adapter);

    }

Кто-нибудь может увидеть проблему? Спасибо

1 Ответ

0 голосов
/ 29 августа 2018

Вы создаете адаптер со списком, но ваш список получает элементы только после завершения запроса. Одним из решений является создание адаптера перед оператором запроса:

ArrayAdapter<String> waiter_adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, listWaiters);
WaiterSpinner.setAdapter(waiter_adapter);

А внутри onResponse, после того как вы добавите элементы в список, позвоните waiter_adapter.notifyDataSetChanged()

...