Java httpclient.client.HttpResponseException:请求太多
我创建了一个应用程序,可以从GoogleBooksAPI读取数据并在recyclerView中显示 有时回收视图中的项目不会显示 在我的日志中,我得到以下信息(这不是导致我的应用程序崩溃的错误,但它显示了这一点): 什么会导致此错误 我使用它的方式是:Java httpclient.client.HttpResponseException:请求太多,java,android,android-asynctask,loopj,google-books,Java,Android,Android Asynctask,Loopj,Google Books,我创建了一个应用程序,可以从GoogleBooksAPI读取数据并在recyclerView中显示 有时回收视图中的项目不会显示 在我的日志中,我得到以下信息(这不是导致我的应用程序崩溃的错误,但它显示了这一点): 什么会导致此错误 我使用它的方式是: MyBookClient.getInstance().getBooks( discoverBooks.getBookID(), new JsonHttpResponseHandler() { @Overri
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) {
}
}
}
谢谢大家! 您的应用程序可能在短时间内发出大量请求,因此消除错误429的最佳策略是实施控制策略:
在所有情况下,您都可以通过异步方式,交付作业或事件订阅实现,将图书数据注入页面或其他内容。是否存在发出连续请求的应用程序流?尝试在这些请求之间添加延迟,我想现在它可以解决。但这是一个异步任务。我如何控制它?有什么方法可以知道每个请求之间的延迟时间吗?我认为测试是最好的方法,增加它直到你的应用程序不再显示错误。
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) {
}
}