我正在从事mvvm设计,但OnResponse并未将数据保存在List中。返回空列表数组。我无法到达有价值的名单。我真的不知道错误的代码在哪里。这是代码。请帮助。

public class RetroClass {

     private static final String BASE_URL="--";

        private List<ProductModel> productList=new ArrayList<>();

        public static Retrofit getRetroInstance(){

            return new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
        }

        public static APIService getAPIService(){

            return getRetroInstance().create(APIService.class);
        }

        public List<ProductModel> getProducts(){

            APIService apiService=getAPIService();

            apiService.getProducts().enqueue(new Callback<List<ProductModel>>() {
                @Override
                public void onResponse(Call<List<ProductModel>> call, Response<List<ProductModel>> response) {

                    productList.addAll(response.body());
                    for (int k=0;k<productList.size();k++) {
                        Log.d("onResponse: ", productList.get(k).getOrderName());//im getting the value here
                    }
                }

                @Override
                public void onFailure(Call<List<ProductModel>> call, Throwable t) {
                    Log.d("onFailure: ",t.getMessage());

                }
            });
            return productList;//but this is empty

        }

    }


这是我的视图模型。

public class ProductsVievModal extends ViewModel {

        List<ProductModel> productList;
        LiveData<List<ProductModel>> liveproductList;
        RetroClass apiClass=new RetroClass();

        public List<ProductModel> getProducts(){

            productList=apiClass.getProducts();
            for (int k=0;k<productList.size();k++) {
                Log.d("onResponse: ", productList.get(k).getOrderName());
            }
            return productList;
        }

    }

最佳答案

.enqueue正在异步发送请求,并将其响应通知回调。它是异步的。 onResponse()必须先完成,然后才能返回产品列表。

我怀疑在return productList;返回其值之前已执行。您可以通过在onResponse()之前放置一个日志来检查哪个行首先执行吗?

关于android - Android Studio retrofit OnResponse问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58045928/

10-12 22:30