Android - Spinner не показывает выбранный элемент, когда он заполнен асинхронным ответом веб-запроса - PullRequest
0 голосов
/ 19 апреля 2020

Мне нужно заполнить счетчик (раскрывающийся список) ответом веб-службы (Android Studio 3.6.2). Для этого я использую библиотеку volley . Я мог видеть, что счетчик заполнен ответом веб-сервиса. Но при выборе этого элемента он не отображается как выбранный элемент в раскрывающемся списке.

Все отлично работает, если это stati c данных.

Я думаю это происходит потому, что я использую асинхронный запрос залпа .

В этом посте ( Что касается загрузки элементов в счетчик с использованием библиотеки залпа ), я мог бы увидеть решение, использующее Будущее (синхронный запрос), но мой запрос получает блокировку там навсегда.

Может кто-нибудь предложить способ, как Spinner показать выбранный элемент с dynamici c асинхронные данные.

Соответствующая часть кода

// добавление слушателя в спиннер

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        // clicked item will be shown as spinner
        selectedCourse[0] = parent.getItemAtPosition(position).toString();
    }
    @Override
    public void onNothingSelected(AdapterView<?> parent) {
    }
});

// привязать счетчик к данным

private void prepareData(){
    //adapter for spinner
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(activity, android.R.layout.simple_spinner_item,getAllCourses());
    //attach adapter to spinner
    spinner.setAdapter(adapter);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}

/ получить данные из веб-службы

public List<String> getAllCourses() {
     final List<String> courseList = new ArrayList<String>() ;
     final JsonArrayRequest queueRequest = new JsonArrayRequest(Request.Method.GET,URL,null,new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            courseList.addAll(parseCourseJson(response));
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(activity, "Unable to communicate with the server", Toast.LENGTH_LONG).show();
        }
...