У меня проблема с приложением 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» показывает добавляемые значения