簡體   English   中英

loopj android-async-http客戶端導致應用程序崩潰,並出現nullPointerException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM