Is JsonObjectRequest (); работает в отдельной ветке? - PullRequest
0 голосов
/ 16 апреля 2020

Сначала я должен отобразить список отделов, доступных в таблице, в счетчике. Пользователь выберет один из них. Затем мне нужно отобразить все курсы, доступные в определенном отделе, и так далее.

В 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 (), поэтому спиннер пуст. Итак, как с этим справиться?

...