Android Studio Retrofit OnResponse Проблема - PullRequest
1 голос
/ 22 сентября 2019

Я работаю над дизайном mvvm, но OnResponse не сохраняет данные в списке.Возвращает массив списков emtpy.Я не могу достичь ценного списка.Я действительно не знаю, где находится неправильный кусок кода.Вот код. Помогите пожалуйста.

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;
        }

    }

1 Ответ

0 голосов
/ 22 сентября 2019

.enqueue асинхронно отправляет запрос и уведомляет ответный вызов о его ответе.Это асинхронный.onResponse() необходимо заполнить, прежде чем вернуть список продуктов.

Я подозреваю, что return productList; выполняется до того, как onResponse() вернул свое значение.Можете ли вы проверить, поместив журнал перед return productList;, чтобы увидеть, какая строка выполняется первой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...