Мне нужно заполнить счетчик (раскрывающийся список) ответом веб-службы (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();
}