我有一个片段,我使用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
如果我打电话一次,然后重新启动应用程序,它就可以了。当我连续两次调用它时,就会发生这种情况。
答案 0 :(得分:0)
使用此方法代替RestClient。
public static AsyncHttpClient getAsyncHttpClient() {
return new AsyncHttpClient();
}