2013-10-03 41 views
0

我在我的應用程序中使用AsyncHTTPClient(loopj.com/android-async-http/)到多餘的json api。它工作正常,除非用戶在asynchttpclient完成其工作之前按下後退按鈕。 它崩潰的應用程序。 這是我的onFinish()方法代碼。loopj android-async-http客戶端導致應用程序崩潰與nullPointerException

@Override 
       public void onFinish(){ 
        super.onFinish(); 
        if(nodata == false){ 
         getActivity().runOnUiThread(new Runnable() { 
          public void run() { 
           /** 
           * Updating parsed JSON data into ListView 
           * */ 
           adapter=new AlbumListAdapter(AlbumsListActivity.this, tracksList); 
           lv.setAdapter(adapter); 
           adapter.notifyDataSetChanged(); 

           setTitle(activity_title); 
           findViewById(R.id.loading_layout).setVisibility(View.GONE); 
           lv.setVisibility(View.VISIBLE); 
          } 
         }); 
        }else{ 
         runOnUiThread(new Runnable() { 
          public void run() { 
           adapter=new AlbumListAdapter(AlbumsListActivity.this, tracksList); 
           lv.setAdapter(adapter); 
           adapter.notifyDataSetChanged(); 

           findViewById(R.id.loading_layout).setVisibility(View.GONE); 
           lv.setEmptyView(findViewById(R.id.empty_list_item)); 
           lv.setVisibility(View.VISIBLE); 
          } 
         }); 
        } 
       } 
      }); 

這裏是堆棧跟蹤

FATAL EXCEPTION: main 
java.lang.NullPointerException 
10-03 15:58:02.732: E/AndroidRuntime(19532): at com.example.ListFragment$2.onFinish(ListFragment.java:423) 
10-03 15:58:02.732: E/AndroidRuntime(19532): at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:194) 
10-03 15:58:02.732: E/AndroidRuntime(19532): at com.loopj.android.http.AsyncHttpResponseHandler$1.handleMessage(AsyncHttpResponseHandler.java:84) 
10-03 15:58:02.732: E/AndroidRuntime(19532): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-03 15:58:02.732: E/AndroidRuntime(19532): at android.os.Looper.loop(Looper.java:137) 
10-03 15:58:02.732: E/AndroidRuntime(19532): at android.app.ActivityThread.main(ActivityThread.java:4448) 
10-03 15:58:02.732: E/AndroidRuntime(19532): at java.lang.reflect.Method.invokeNative(Native Method) 
10-03 15:58:02.732: E/AndroidRuntime(19532): at java.lang.reflect.Method.invoke(Method.java:511) 
10-03 15:58:02.732: E/AndroidRuntime(19532): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
10-03 15:58:02.732: E/AndroidRuntime(19532): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
10-03 15:58:02.732: E/AndroidRuntime(19532): at dalvik.system.NativeStart.main(Native Method) 

我是新來的Android和如果有什麼錯誤,我可能會做,請大家指出。 請幫助,提前致謝!

+0

你最終找到了解決問題的辦法嗎?我有同一個。 – Karim

+0

不是,但嘗試了很多東西,它的工作。以下由indigomonkey給出的答案有所幫助。我重寫了onFailure方法的所有版本,檢查了適配器,列表視圖和上下文等變量爲空的變量。你在使用actionBarSherlock和碎片嗎?如果是這樣,還檢查從getActivity()返回的上下文爲空。 – StarWars

回答

1

很難分辨出您的案例中的特定錯誤,而無法訪問您方法onFinish()中的行號。

但是,您的堆棧跟蹤的頂部行顯示了NullPointerException發生在

com.example.ListFragment$2.onFinish(ListFragment.java:423) 

,這說明你需要找到你的代碼行423,這將縮小該變量爲NULL值你正試圖訪問。

例如,假設您發現該行423是以下行:

lv.setAdapter(adapter); 

您現在可以肯定的是lv爲空和調試原因,可能是。

1

如果由於背壓而關閉應用程序時出現未決請求,您可能會收到NullPointerException。通常在我的情況下回調處理程序。我發現在AsyncHttpClient上調用.cancelRequest可以解決這個問題。在我的情況下,我在我的Activity的onDestroy()中調用它,只要發生後退並且應用程序退出,就會調用它。

Context context = this; // "this" is the Activity used by the client 
client.cancelRequests(context, true); 

Javadoc在方法定義中解釋了這一點。

相關問題