我的Android Studio应用程序有一个问题,因为我试图从URL解析JSON数据,并用数据创建对象“Director”,然后将每个对象存储在一个数组中。问题是,当我按下按钮启动执行此操作的方法时,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);
search = (Button) findViewById(R.id.btnSearch);
search.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
searchCompanyDirectors("02293426");
}
});
}
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());
}
public String parseApp(String appointment){
String[] arrayDirectors = appointment.split("/",3);
String[] split = arrayDirectors[2].split("\\\\");
return split[0];
}
}
@Override
public void onCompanyClicked(int position){
}
我的导演班:
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”输出:
[导演1,导演2,导演3]
当我试图在最后一个方法中使用directorList时(它基于directorList数组执行操作),问题就出现了,但是由于第一次按按钮完成该方法时数组是空的,所以它没有执行它应该执行的操作。我也不确定为什么Logcat“tag2”在方法中间显示要添加到数组中的值,然后在方法末尾显示空数组,而Logcat“tag1”显示要添加的值?