我创建了一个从googlebooksapi读取数据并在recyclerview中显示的应用程序。
有时回收视图中的项目不会显示。
在我的日志中,我得到以下信息(这不是导致我的应用程序崩溃的错误,但它显示了这一点):
V/AsyncHttpRH: Progress 538 from 1 (53800%)
W/JsonHttpRH: onFailure(int, Header[], Throwable, JSONObject) was not overriden, but callback was received
cz.msebera.android.httpclient.client.HttpResponseException: Too Many Requests
at com.loopj.android.http.AsyncHttpResponseHandler.sendResponseMessage(AsyncHttpResponseHandler.java:446)
at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:160)
at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:177)
at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:106)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
什么会导致这个错误?
我使用它的方式是:
MyBookClient.getInstance().getBooks( discoverBooks.getBookID(), new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
if (response != null) {
final MyBook books = MyBook.fromJson( response );
}
}
} );
哪里:
公共类mybookclient{
private static final String API_BASE_URL = "https://www.googleapis.com/books/v1/volumes/";
private AsyncHttpClient client;
public static MyBookClient instance = new MyBookClient();
public MyBookClient() {
this.client = new AsyncHttpClient();
}
public static MyBookClient getInstance() {
return instance;
}
public void getBooks(final String query, JsonHttpResponseHandler handler) {
try {
client.get( API_BASE_URL + URLEncoder.encode( query, "utf-8" ), handler );
} catch (UnsupportedEncodingException ignored) {
}
}
}
谢谢您!
1条答案
按热度按时间kxkpmulp1#
可能你的应用程序在短时间内发出了很多请求,因此消除错误429的最佳策略是实施控制策略:
你可以使用去抖动或节流(将取决于什么适合你的情况);
实现一个等待请求队列以在延迟时间内传递,以避免429错误。
当您确实需要发出此请求时,请在应用程序中进行Map,因此创建一个作业以验证何时考虑了标准。
在所有情况下,您都可以以异步方式执行,传递作业或事件订阅实现,以便将图书数据注入页面或其他内容。