Очередь запросов в залпе не может быть применена к View Model - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь загрузить мои JSON данные в класс модели представления, который расширяет android View Model, и я не могу получить контекст для очереди запросов

Класс View Model, который расширяется с помощью android модель представления будет использоваться наблюдателем для загрузки списка продуктов в адаптер продукта методом onChanged

Вот мой код класса модели представления


public class ProductViewModel extends AndroidViewModel {

    private MutableLiveData<List<Product>> productLiveData;
    private List<Product> productList;
    private Application application;

    private JsonArrayRequest productJsonArrayRequest;

    public ProductViewModel(@NonNull Application application) {
        super(application);
    }

    public MutableLiveData<List<Product>> getProductLiveData () {
        if(productLiveData == null) {
            productLiveData = new MutableLiveData<>();
            initialize();
        }
        return productLiveData;
    }

    private void initialize(){
        productJsonRequest();
        productLiveData.setValue(productList);
    }


    private void productJsonRequest() {

        productList = new ArrayList<>();


            JsonArrayRequest productsJsonArrayRequest = new JsonArrayRequest(Config.FETCH_PRODUCTS, new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    JSONObject jsonObject;

                    for (int i = 0; i < response.length(); i++) {

                        try {
                            jsonObject = response.getJSONObject(i);
                            Product product = new Product();

                            product.setId(jsonObject.getInt("id"));
                            product.setName(jsonObject.getString("name"));
                            product.setPrice(jsonObject.getDouble("price"));
                            product.setStock(jsonObject.getInt("stock"));
                            product.setCategoryId(jsonObject.getInt("categoryId"));
                            product.setCategory(jsonObject.getString("category"));
                            product.setPhoto(jsonObject.getString("photo"));

                            productList.add(product);


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    error.printStackTrace();
                }
            });


            RequestQueue productRequestQueue = Volley.newRequestQueue(this);
            productRequestQueue.add(productsJsonArrayRequest);
    }
} 

Проблема здесь

RequestQueue productRequestQueue = Volley.newRequestQueue(this);

1 Ответ

0 голосов
/ 25 февраля 2020

Volley.newRequestQueue () требует передачи контекста. Вы используете ключевое слово "this", которое относится к классу модели представления, который не является контекстом. Это легко исправить, просто измените его на:

RequestQueue productRequestQueue = Volley.newRequestQueue(getApplication());
...