[英]loopj android-async-http client causes app to crash with nullPointerException
我在我的應用程序中使用AsyncHTTPClient(loopj.com/android-async-http/)來處理多余的json API。 除非用戶在asynchttpclient完成其工作之前按下后退按鈕,否則它工作正常。 它使應用程序崩潰。 這是我的onFinish()
方法代碼。
@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 );
}
});
}
}
});
這是stackTrace
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的新手,如果我可能在做錯什么,請指出。 請幫助,在此先謝謝!
如果不訪問方法onFinish()
的行號,很難判斷出您的具體錯誤是什么。
但是,堆棧跟蹤的第一行顯示NullPointerException
發生在
com.example.ListFragment$2.onFinish(ListFragment.java:423)
這表明您需要在代碼中找到第423行,這將縮小您嘗試訪問的值為null的變量的范圍。
例如,假設您發現第423行是以下行:
lv.setAdapter(adapter);
現在,您可以確保lv
為null並調試為什么可能為null。
如果由於后按關閉應用程序而導致有待處理的請求,則很可能會收到NullPointerException。 通常在我的情況下在回調處理程序中。 我發現在AsyncHttpClient上調用.cancelRequest可以解決此問題。 在我的情況下,我在Activity的onDestroy()中調用它,只要發生后退操作並退出應用程序,它就會被調用。
Context context = this; // "this" is the Activity used by the client
client.cancelRequests(context, true);
Javadoc在方法定義中對此進行了解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.