代码之家  ›  专栏  ›  技术社区  ›  Sean

Android Studio解析JSON并将对象添加到数组中只需按第二个按钮?

  •  0
  • Sean  · 技术社区  · 6 年前

    我的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);
            //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”输出:

    [导演1,导演2,导演3]
    

    当我试图在最后一个方法中使用directorList时(它基于directorList数组执行操作),问题就出现了,但是由于第一次按按钮完成该方法时数组是空的,所以它没有执行它应该执行的操作。我也不确定为什么Logcat“tag2”在方法中间显示要添加到数组中的值,然后在方法末尾显示空数组,而Logcat“tag1”显示要添加的值?

    0 回复  |  直到 6 年前