在此Fragment中第二次调用API时出现ClientProtocolException

时间:2015-07-22 17:34:50

标签: android-async-http

我有一个片段,我使用Async Http库进行API调用。

这是代码:

private void getPeers() {
    Log.i("REST", "getPeers");
    RestClient.get(RestClient.PEERS_URL, null, new TextHttpResponseHandler() {
        @Override
        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
            Log.i("REST", "onFailure");
            stopRefreshing();
            if (statusCode == 0) {
                showNoConnectionError();
            }
        }

        @Override
        public void onSuccess(int statusCode, Header[] headers, String responseString) {
            Log.i("REST", "onSuccess");
            stopRefreshing();
            // Create arraylist from json
            peerArrayList = new Gson().fromJson(responseString, new TypeToken<List<Peer>>() {
            }.getType());
            // Show ListView
            populateListView(peerArrayList);
        }
    });
}

当我第一次调用getPeers()时,一切正常。

第二次调用后,它会加载5-10秒然后超时。

这是2次调用后的日志:

07-22 18:33:08.909  30671-30671/com.challenge.challengeapp I/REST﹕ getPeers
07-22 18:33:09.044  30671-30671/com.challenge.challengeapp I/REST﹕ onSuccess
07-22 18:33:11.707  30671-30671/com.challenge.challengeapp I/REST﹕ getPeers
07-22 18:33:19.589   30671-6125/com.challenge.challengeapp W/System.err﹕ org.apache.http.client.ClientProtocolException
07-22 18:33:19.593   30671-6125/com.challenge.challengeapp W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:562)
07-22 18:33:19.594   30671-6125/com.challenge.challengeapp W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
07-22 18:33:19.594   30671-6125/com.challenge.challengeapp W/System.err﹕ at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:148)
07-22 18:33:19.594   30671-6125/com.challenge.challengeapp W/System.err﹕ at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:179)
07-22 18:33:19.594   30671-6125/com.challenge.challengeapp W/System.err﹕ at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:108)
07-22 18:33:19.595   30671-6125/com.challenge.challengeapp W/System.err﹕ at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
07-22 18:33:19.595   30671-6125/com.challenge.challengeapp W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-22 18:33:19.595   30671-6125/com.challenge.challengeapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-22 18:33:19.595   30671-6125/com.challenge.challengeapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-22 18:33:19.597   30671-6125/com.challenge.challengeapp W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
07-22 18:33:19.597   30671-6125/com.challenge.challengeapp W/System.err﹕ Caused by: org.apache.http.client.CircularRedirectException: Circular redirect to 'http://52.17.110.217/api/friends/'
07-22 18:33:19.597   30671-6125/com.challenge.challengeapp W/System.err﹕ at org.apache.http.impl.client.DefaultRedirectHandler.getLocationURI(DefaultRedirectHandler.java:178)
07-22 18:33:19.597   30671-6125/com.challenge.challengeapp W/System.err﹕ at org.apache.http.impl.client.DefaultRequestDirector.handleResponse(DefaultRequestDirector.java:928)
07-22 18:33:19.597   30671-6125/com.challenge.challengeapp W/System.err﹕ at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:480)
07-22 18:33:19.597   30671-6125/com.challenge.challengeapp W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
07-22 18:33:19.597   30671-6125/com.challenge.challengeapp W/System.err﹕ ... 9 more
07-22 18:33:19.606  30671-30671/com.challenge.challengeapp I/REST﹕ onFailure

如果我打电话一次,然后重新启动应用程序,它就可以了。当我连续两次调用它时,就会发生这种情况。

1 个答案:

答案 0 :(得分:0)

使用此方法代替RestClient。

 public static AsyncHttpClient getAsyncHttpClient() {
        return new AsyncHttpClient();
    }