2014-09-04 2 views
1

내 안드로이드 앱에 loopj async 요청이 있습니다.loopj 취소시 충돌 요청

private RequestHandle requestFetchAds; 
requestFetchAds = HJRestClient.post(getActivity(), encodedURL, params, new JsonHttpResponseHandler() {...}); 

요청이 잘 실행하고 어떤 상황에서 내가 요청을 취소해야합니다

여기에 코드입니다. 다음은 취소 코드입니다 :

if (requestFetchAds != null && !requestFetchAds.isFinished() && !requestFetchAds.isCancelled()) { 
      Log.d(LOG_TAG, String.format("Cancelling request fetch ads")); 
      Log.d(LOG_TAG, String.format("Cancelling request: ") + (requestFetchAds.cancel(true) ? " succeeded" : " failed")); 
} 

그러나이 방법 requestFetchAds.cancel(true)에 충돌이 나는 이유를 알지 못한다. 나는 또한 같은 컨텍스트를 사용하여 요청을 취소 시도했다

09-04 16:14:42.530 3999-3999/com.haraj.haraj E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    android.os.NetworkOnMainThreadException 
      at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1144) 
      at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.close(OpenSSLSocketImpl.java:996) 
      at org.apache.http.impl.SocketHttpClientConnection.shutdown(SocketHttpClientConnection.java:183) 
      at org.apache.http.impl.conn.DefaultClientConnection.shutdown(DefaultClientConnection.java:150) 
      at org.apache.http.impl.conn.AbstractPooledConnAdapter.shutdown(AbstractPooledConnAdapter.java:169) 
      at org.apache.http.impl.conn.AbstractClientConnAdapter.abortConnection(AbstractClientConnAdapter.java:378) 
      at org.apache.http.client.methods.HttpRequestBase.abort(HttpRequestBase.java:159) 
      at com.loopj.android.http.AsyncHttpRequest.cancel(AsyncHttpRequest.java:169) 
      at com.loopj.android.http.RequestHandle.cancel(RequestHandle.java:50) 
      at com.haraj.haraj.HJAdsListFragment.reloadAds(HJAdsListFragment.java:699) 
      at com.haraj.haraj.HJAdsListFragment$2.onClick(HJAdsListFragment.java:328) 
      at android.view.View.performClick(View.java:4475) 
      at android.view.View$PerformClick.run(View.java:18786) 
      at android.os.Handler.handleCallback(Handler.java:730) 
      at android.os.Handler.dispatchMessage(Handler.java:92) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:5493) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:525) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
      at dalvik.system.NativeStart.main(Native Method) 

:

여기 로그의

HJRestClient.getHTTPClient().cancelRequests(getActivity(), true); 

하지만이 또한 도움이되지 않았다.

도움을 주시면 감사하겠습니다.

+0

'requestFetchAds.cancel (true) 메소드에서 충돌이 발생하고 이유를 모르겠습니다. 'android.os.NetworkOnMainThreadException ... – Selvin

+0

@Selvin 그게 무슨 뜻입니까? 나는 정직하게 모른다. 나는 안드로이드 개발의 초보자입니다. –

+0

솔직히 [google.com] (http://google.com)이 알고 있어야합니다 (또는 [android framework documentation] (http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html)) – Selvin

답변

2

다음과 같이 취소 요청을 AsyncTask에 배치하여 충돌을 해결할 수있었습니다.

AsyncTask.execute(new Runnable() { 
     @Override 
     public void run() { 
      Log.d(LOG_TAG, String.format("Cancelling request: ") + (requestFetchAds.cancel(false) ? " succeeded" : " failed")); 

     } 
    }); 

셀 바인에게 감사드립니다.