2013-10-03 38 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在方法定义中解释了这一点。

相关问题