Java httpclient.client.HttpResponseException:请求太多

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

我创建了一个应用程序,可以从GoogleBooksAPI读取数据并在recyclerView中显示

有时回收视图中的项目不会显示

在我的日志中,我得到以下信息(这不是导致我的应用程序崩溃的错误,但它显示了这一点):

什么会导致此错误

我使用它的方式是:

        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的最佳策略是实施控制策略:

  • 您可以使用(取决于适合您的情况)
  • 实现一个等待请求队列以在延迟时间内交付,以避免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) {
    
        }
    }