You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Retrofit的onResponse中返回列表并构建ListView?

Retrofit异步回调无法获取返回值,构建列表解决方案

我查过不少类似问题,但都没精准解决我的需求。现在用Retrofit拉取数据列表,想把数据存到本地列表后构建ListView,但没法从onResponse里拿到返回值,直接return列表也没用,求帮忙。

原相关代码

回调函数

public ListCatcher allBreeds(View view){
        ArrayList<String> breedList = new ArrayList<>(breeds);

        Ibreeds.allBreeds().enqueue(new Callback<Breeds>() {
            @Override
            public void onResponse(Call<Breeds> call, Response<Breeds> response) {
                List<String> breeds = response.body().getMessage();

                for (String b: breeds){
                    breedList.add(b);
                }
            }

            @Override
            public void onFailure(Call<Breeds> call, Throwable t) {
                Snackbar.make(view,R.string.connectionStatus, 3000 ).show();
            }
        });

        ListCatcher listcatcher = new ListCatcher(breedList);
        return listcatcher;
    }

接口定义

public interface BreedsDAOInterface {

    @GET("breeds/list")
    Call<Breeds> allBreeds();

    @GET("breed/{breed}/list")
    Call<Breeds> listSubBreed(@Path("breed") String breed);

    @GET("breed/{breed}/images")
    Call<Breeds> listBreedImages(@Path("breed") String breed);

    @GET("breed/{breed}/{subBreed}/images")
    Call<Breeds> listSubBreedImages(@Path("breed") String breed, @Path("subBreed") String subBreed);

    @GET("breeds/image/random")
    Call<Breeds> iFeelLucky();

}

ApiUtils类

public class ApiUtils {

    public static final String BASE_URL = "https://dog.ceo/api/";

    public static BreedsDAOInterface getBreedsDaoInterface(){
        return RetrofitClient.getClient(BASE_URL).create(BreedsDAOInterface.class);
    }

}

RetrofitClient类

public class RetrofitClient {

    private static Retrofit retrofit = null;

    public static Retrofit getClient(String baseURL){
        if (retrofit == null){
            retrofit = new Retrofit
                    .Builder()
                    .baseUrl(baseURL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

Breeds实体类

public class Breeds {

    @SerializedName("message")
    @Expose
    private List<String> message;


    public List<String> getMessage() {
        return message;
    }

    public void setMessage(List<String> message) {
        this.message = message;
    }

}

已找到的解决方案

删除了ListCatcher,把RecyclerView适配器的初始化逻辑放到enqueue的回调函数里,代码如下:

public class HomeActivity extends AppCompatActivity {

    List<String> breedsList = new ArrayList<>();
    private BreedsInterface Ibreeds;
    private RecyclerViewAdapter RWAdapter;
    private ActivityHomeBinding binding;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityHomeBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        Ibreeds = ApiUtils.getBreedsDaoInterface();
        allBreeds();

    }

    public void allBreeds(){

        Ibreeds.allBreeds().enqueue(new Callback<Answer>() {
            @Override
            public void onResponse(Call<Answer> call, Response<Answer> response) {
                List<String> breedResponceList = response.body().getMessage();
                breedsList.clear();
                breedsList.addAll(breedResponceList);
                initRecyclerView();
            }

            @Override
            public void onFailure(Call<Answer> call, Throwable t) {
                throwError();
            }
        });
    }


    private void throwError() {
        Snackbar.make(binding.getRoot(), R.string.connectionStatus, 3000).show();
    }

    private void initRecyclerView() {
        RWAdapter = new RecyclerViewAdapter(breedsList);
        binding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
        binding.recyclerView.setAdapter(RWAdapter);
    }

}

核心逻辑是把列表适配器的初始化与绑定操作,放到Retrofit异步请求成功的onResponse回调中执行,确保数据返回后再构建列表。

内容的提问来源于stack exchange,提问作者Burak Cem Dursun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:19:23