У меня есть эта проблема с запросами библиотеки 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");
}
});
}
};
}