Ошибка нехватки памяти при использовании Volley с использованием таймеров - PullRequest
1 голос
/ 18 октября 2019

У меня есть эта проблема с запросами библиотеки Volley. Я делаю вызовы API, и так как они должны обновляться очень часто, я реализовал таймеры. Через некоторое время он выдает ошибку: Ошибка «Throwing OutOfMemoryError» pthread_create (стек 1040 КБ): попробуйте еще раз. Я использовал метод, предложенный в этом сообщении: Throwing OutOfMemoryError "pthread_create (Стек 1040 КБ) не удалось: попробуйте еще раз "при выполнении асинхронных публикаций с использованием Volley , но у меня это не сработало, данные, поступающие из API, перестали обновляться. Я подумал, что это может быть что-то с таймерами или это просто что-тоЯ делаю неправильно, используя Volley.

Если у вас есть идеи, не стесняйтесь поделиться.

Мой класс принтера

    public void setMenuInformation(String url, Context context, final VolleyCallback callback) {
    Log.d("API", "Currently calling URL " + url);

    if (eRequestQueue == null) {
        eRequestQueue  = Volley.newRequestQueue(context);
        eRequestQueue.add(new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {


                String temp = response.substring(2, response.length() - 2);
                Log.d("API", "Current menu" + response);
                byte msgArray[];
                try {
                    msgArray = temp.getBytes("ISO-8859-1");
                    currentMenu = msgArray[0];
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }



                menuInformation = response;
                callback.onSuccess(menuInformation);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("API", "Current menu Nope ");
                callback.onFailure(error);
            }
        }));
    }
}

Основная деятельность:

  myPrinterDetails.setMenuInformation("http://" + nsdServiceInfo.getHost() + "/GetCurrentMenu", 
 MainActivity.this, new PrinterNew.VolleyCallback() {
                @Override
                public void onSuccess(String result) {

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.d("NSD", "Current menu response succeded and added to array " + nsdServiceInfo);
                            //services.add(myPrinterDetails);
                            mAdapter.notifyDataSetChanged();

                        }
                    });
                    Log.d("NSD", "CurrentMenu " + myPrinterDetails.getMenuInformation());

                    myTimer.schedule(new TimerTask() {
                        @Override
                        public void run() {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    myPrinterDetails.setMenuInformation("http://" + nsdServiceInfo.getHost() + "/GetCurrentMenu", MainActivity.this, new PrinterNew.VolleyCallback() {
                                        @Override
                                        public void onSuccess(String result) {

                                            Log.d("NSD", "Current menu  response added to timer  " + nsdServiceInfo);
                                            mAdapter.notifyDataSetChanged();
                                        }


                                        @Override
                                        public void onFailure(Object response) {
                                            Log.d("NSD", "Current menu timer  failed");
                                        }
                                    });
                                }
                            });
                        }
                    }, 0, 2000);

                }

                @Override
                public void onFailure(Object response) {
                    Log.d("NSD", "Current menu response failed");
                }
            });

        }
    };
}
...