Spinner не отображает данные при выборе, также показывает данные счетчика в последнее время - PullRequest
0 голосов
/ 16 июня 2020

Я использую счетчик, который загружает значение из запроса GET на мой веб-сервер. Но проблема в том, что счетчик показывает загруженное значение (хотя и в последнее время), но не показывает выбранное значение. изображение прядильщика после выбора

Я проверил цвет фона. Пытался запустить код в потоке пользовательского интерфейса, но он не работает.

<Spinner
            android:id="@+id/setup_wizard_spinner_year"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
        </Spinner>

Действие

    adapterYear = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, viewModel.getData("Year"));
    iYearSpinner.setAdapter(adapterYear);

Метод

public List<String> getData(String query){
    OkHttpClient httpClient = new OkHttpClient();
    String URL = "mysite.com?query=" + query;
    List<String> spinnerDataList = new ArrayList<String>();
    Request request = new Request.Builder()
                        .url(URL)
                        .build();
    httpClient.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(@NotNull Call call, @NotNull IOException e) {
            e.printStackTrace();
        }

        @Override
        public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
            if(response.isSuccessful()){
                String webResponse = response.body().string();
                JSONArray jsonArray = null;
                try {
                    jsonArray = new JSONArray(webResponse);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                for (int i=0;i<jsonArray.length();i++){
                    spinnerDataList.add(jsonArray.optString(i));
                }

            }
        }
    });
    return spinnerDataList;
 }

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Вы извлекаете spinnerDataList из inte rnet, для получения данных потребуется время.

Попробуйте вернуть LiveData и понаблюдайте за ним в Activity, а затем установите список в адаптер.

Вы используете R.layout.support_simple_spinner_dropdown_item вместо R.layout.support_simple_spinner_item в конструкторе ArrayAdapter.

Установите ресурс макета для создания раскрывающихся представлений adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)

0 голосов
/ 19 июня 2020

Исправлено: Заполнение данных в UiThread, выполнение сетевого вызова в другом потоке. Подождите, пока поток не закончит выполнение. Это может замедлить работу приложений, но я был в порядке с этим, использовал обработчик для отображения счетчика, поскольку моя следующая задача больше зависит от того, какие данные я получаю и выбираю.

...