Сначала я должен отобразить список отделов, доступных в таблице, в счетчике. Пользователь выберет один из них. Затем мне нужно отобразить все курсы, доступные в определенном отделе, и так далее.
В Main_activity у меня есть Arrayadapter с именем Arrayadpter для счетчика. Источником данных для arrayadapter является ArrayList с именем DataList.
У меня есть две функции, а именно DownloadDepartments (); и UpdateArrayAdapter (); Первый загружает названия отделов, доступных в таблице, и сохраняет их в массиве с именем DepartmentList. Второй устанавливает DataList как DataList.addAll (DepartmentList);
Я вызываю DownloadDepartments (); сначала и немедленно UpdateArrayAdapter (); Но счетчик выглядит пустым.
MainActivity{
// initializing componets
Spinner spinner = findViewById(R.id.Spinner);
ArrayList<String> SubjectList,CourseList,DepartmentList,DataList;
ArrayAdapter arrayadapter = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, DataList);
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
DownloadDepartments();
UpdateArrayAdapter();
}
Я реализовал методы, как показано во фрагменте кода ниже
public void DownloadDepartments(){
// JsonObjectRequest code follows. There are no errors in parsing.
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, Url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
JSONArray jsonArray = null;
JSONObject jsonObject = null;
String string = null;
String id = null;
DataList.clear();
try {
jsonArray = response.getJSONArray("Departments");
for (int i = 0; i < jsonArray.length(); i++) {
jsonObject = jsonArray.getJSONObject(i);
string = jsonObject.getString("Name");
DepartmentList.add(string);
}
} catch (JSONException e) {
e.printStackTrace();
Select_Info.setText("[Json Exception]");
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Select_Info.setText("[Volley Error Listener]");
}
});
requestQueue.add(jsonObjectRequest);
}
public void UpdateArrayAdapter(){
DataList.clear();
DataList.addAll(DepartmentList);
arrayAdapter.notifyDataSetChanged();
}
Я думаю, что проблема здесь в том, что JsonObjectRequest выполняется в отдельном потоке. Поэтому перед завершением DownloadDepartmet () вызывается UpdateArrayAdapter (), поэтому спиннер пуст. Итак, как с этим справиться?