Разбор JSON и добавление объектов в массив работает только при втором нажатии кнопки? - PullRequest
0 голосов
/ 11 марта 2019

У меня проблема с приложением Android Studio, так как я пытаюсь проанализировать данные JSON из URL-адреса и создать объекты «Директор» с данными, а затем сохранить каждый объект в массиве. Проблема в том, что когда я нажимаю кнопку, чтобы запустить метод, который делает это, Logcat показывает, что в конце метода ничего не было добавлено в массив. Однако, когда я нажимаю кнопку во второй раз, они добавляются в массив. Ниже мой код:

public class MainActivity extends AppCompatActivity implements MainAdapter.OnCompanyClickedListener {

    private Button search;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Button to start method
        search = (Button) findViewById(R.id.btnSearch);
        search.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                searchCompanyDirectors("02293426");
            }
        });
    }

    //Parse JSON File From API and Create Directors
    public void searchCompanyDirectors(final String companyNumber){
        Thread thread = new Thread(new Runnable(){
            @Override
            public void run(){
                HttpClient httpClient = new HttpClient();
                try{
                    final String response = httpClient.run("https://MyApiURL"+companyNumber);
                    runOnUiThread(new Runnable(){
                        @Override
                        public void run(){
                            try {
                                JSONObject jsonObject = new JSONObject(response);
                                JSONArray array = jsonObject.getJSONArray("items");
                                for (int i = 0; i < array.length();i++){
                                    JSONObject o = array.getJSONObject(i);
                                    String appointment = o.getString("links");
                                    String parsedAppointment = parseApp(appointment);

                                    Director director = new Director(o.getString("name"),parsedAppointment);
                                    Director.directorList.add(director);
                                }
                            Log.d("tag1",Director.directorList.toString());
                            }catch (JSONException e){
                                e.printStackTrace();
                            }
                        }
                    });
                }
                catch (Exception ex){
                    ex.printStackTrace();
                }
            }
        });
        thread.start();
        Log.d("tag2",Director.directorList.toString());
    }

    //Parse Returned String From JSON
    public String parseApp(String appointment){
        String[] arrayDirectors = appointment.split("/",3);
        String[] split = arrayDirectors[2].split("\\\\");
        return split[0];
    }
}

    @Override
    public void onCompanyClicked(int position){
        //Do stuff with directorlist...
    }

Класс моего директора:

public class Director {

    private String name;
    private String appointment;

    public static List<Director> directorList = new ArrayList<>();

    public Director (String name, String appointment){
        this.name = name;
        this.appointment = appointment;
    }

    public String getName() {

        return name;
    }
}

Logcat "tag1" вывод при первом нажатии кнопки:

[Director1, Director2, Director3]

Logcat "tag2" вывод на первое нажатие кнопки:

[]

Logcat "tag1" вывод на второе нажатие кнопки:

[Director1, Director2, Director3, Director1, Director2, Director3]

Logcat "tag2" вывод на второе нажатие кнопки:

[Director1, Director2, Director3]

Проблема с этим возникает, когда я пытаюсь использовать DirectorList в последнем методе (он делает вещи, основанные на массиве DirectorList), однако, поскольку массив пуст, когда метод завершается при первом нажатии кнопки, он не делает то, что должен делать. Я также не уверен, почему Logcat «tag2» показывает значения, добавляемые в массив в середине метода, а затем массив становится пустым в конце метода, тогда как Logcat «tag1» показывает добавляемые значения

...