1

我对 Volley 库请求有这个问题。我调用 API,因为它们必须经常更新,所以我实现了计时器。一段时间后,它向我抛出错误:“Throwing OutOfMemoryError “pthread_create (1040KB stack) failed: Try again.我使用了这篇文章中建议的方法:Throwing OutOfMemoryError "pthread_create (1040KB stack) failed: Try again" when doing asynchronous posts使用 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");
                }
            });

        }
    };
}
4

0 回答 0