无法在 call.enqueue 中的 for 循环之外获取 ArrayList

我想通过 Retrofit 中的 call.enqueue 方法从 for 循环中获取 ArrayList 数据。


如何访问 call.enqueue 方法之外的列表?


一切正常。打印列表大小时,我得到了我想要的价值。唯一的问题是我无法从 call.enqueue 方法之外访问值。


private void getSchoolList() {

    final Call<List<DanceSchool>> call = RetrofitClient.getInstance().getApi().getDanceSchools();



    call.enqueue(new Callback<List<DanceSchool>>() {

        @Override

        public void onResponse(Call<List<DanceSchool>> call, Response<List<DanceSchool>> response) {

            if(!response.isSuccessful()) {

                Toast.makeText(ListActivity.this, "Response Code: " + response.code(), Toast.LENGTH_SHORT).show();

            }


            List<DanceSchool> danceSchools = response.body();




            for(DanceSchool danceSchool:danceSchools){


                schoolNameList.add(danceSchool.getSchool_name());

                dayList.add(danceSchool.getDays());

                timingList.add(danceSchool.getSun_timing());

                contactNoList.add(danceSchool.getContact_no());

                addressList.add(danceSchool.getAddress());


            }



        }


        @Override

        public void onFailure(Call<List<DanceSchool>> call, Throwable t) {

            Toast.makeText(ListActivity.this, "Failure: "+t.getMessage(), Toast.LENGTH_SHORT).show();


        }

    });


}

我想在 call.enqueue 方法之外访问 ArrayList。


哈士奇WWW
浏览 135回答 2
2回答

慕无忌1623718

最简单的方法可能是声明一个函数,void accessArrayList(ArrayList<DanceSchool> danceSchool){&nbsp; &nbsp; //do stuff with the values}并在里面调用它call.enqueuecall.enqueue(new Callback<List<DanceSchool>>() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onResponse(....) {&nbsp; &nbsp; &nbsp; &nbsp; ........&nbsp; &nbsp; &nbsp; &nbsp; List<DanceSchool> danceSchools = response.body();&nbsp; &nbsp; &nbsp; &nbsp; accessArrayList(danceSchools);&nbsp; &nbsp; &nbsp; &nbsp; .......&nbsp; &nbsp; }}

犯罪嫌疑人X

重点是:现在您正在进行异步调用。您正在请求一些信息,当该信息已编译并准备就绪时,onResponse()将调用该方法。只有这样,该列表才能从传入的响应正文中填充。因此,您可以做的是:在您的封闭类中有另一个方法,例如updateList(),然后简单地从您的onResponse()实现中调用该方法。除此之外,您可能希望将异步调用变成同步调用。然后,相反,您使用execute()等待结果进来(例如,请参见此处)。但是你仍然需要有一个回调方法来调用。或者,您可以在封闭类中有一个字段,例如List<DanceSchool> danceSchools...private void getSchoolList() {&nbsp; final Call<List<DanceSchool>> call = ...&nbsp; &nbsp;&nbsp;&nbsp; call.enqueue(new Callback<List<DanceSchool>>() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onResponse(Call<List<DanceSchool>> call, Response<List<DanceSchool>> response) {&nbsp; &nbsp; ...&nbsp; &nbsp; danceSchools.addAll(response.body());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java