ArrayList的空指针异常的onPostExecute() [英] ArrayList Null Pointer Exception in onPostExecute()

查看:252
本文介绍了ArrayList的空指针异常的onPostExecute()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

获得 NullPointerException异常的ArrayList中。我使用的是线下登录ArrayList的大小,但我总是NPE。

这可能是什么原因?

  Log.d(catArrayList:尺寸:新,+ categoryArrayList.size());

下面是一些code:

 保护无效onPostExecute(布尔结果){
        dialog.cancel();        Log.d(catArrayList:大小,+ categoryArrayList.size());
        Log.d(typArrayList:大小,+ typeArrayList.size());
        Log.d(serArrayList:大小,+ serviceArrayList.size());        Log.d(cArrayList:大小,+ cArrayList.size());
        Log.d(tArrayList:大小,+ tArrayList.size());
        Log.d(sArrayList:大小,+ sArrayList.size());        C类= categoryArrayList.get(0);
        typeArrayList = c.getTypeArrayList();
        Log.d(catArrayList:尺寸:新,+ categoryArrayList.size());        的for(int i = 0; I< typeArrayList.size();我++){
            tArrayList.add(typeArrayList.get(ⅰ).getName());
        }        spinner1.setAdapter(新ArrayAdapter<串GT;(CategoryActivity.this,
                 android.R.layout.simple_spinner_dropdown_item,
                 cArrayList));        spinner2.setAdapter(新ArrayAdapter<串GT;(CategoryActivity.this,
                android.R.layout.simple_spinner_dropdown_item,
                tArrayList));        spinner3.setAdapter(新ArrayAdapter<串GT;(CategoryActivity.this,
                android.R.layout.simple_spinner_dropdown_item,
                sArrayList));     }

登录说:

  11月9日至12日:05:54.585:D / catArrayList:尺寸(30919):2
11月9日至12日:05:54.585:D / typArrayList:尺寸(30919):2
11月9日至12日:05:54.585:D / serArrayList:尺寸(30919):2
11月9日至12日:05:54.585:D / cArrayList:尺寸(30919):2
11月9日至12日:05:54.590:D / tArrayList:尺寸(30919):2
11月9日至12日:05:54.590:D / sArrayList:尺寸(30919):2
11月9日至12日:05:54.590:D / AndroidRuntime(30919):关闭VM
11月9日至12日:05:54.590:W / dalvikvm(30919):主题ID = 1:螺纹未捕获的异常(组= 0x40f9f2a0)退出
11月9日至12日:05:54.590:E / AndroidRuntime(30919):致命异常:主要
11月9日至12日:05:54.590:E / AndroidRuntime(30919):显示java.lang.NullPointerException
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在com.example.modulewise.CategoryActivity $ JSONAsyncTask.onPostExecute(CategoryActivity.java:178)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在com.example.modulewise.CategoryActivity $ JSONAsyncTask.onPostExecute(CategoryActivity.java:1)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在android.os.AsyncTask.finish(AsyncTask.java:631)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在android.os.AsyncTask.access $ 600(AsyncTask.java:177)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在android.os.Handler.dispatchMessage(Handler.java:99)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在android.os.Looper.loop(Looper.java:137)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在android.app.ActivityThread.main(ActivityThread.java:4921)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在java.lang.reflect.Method.invokeNative(本机方法)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在java.lang.reflect.Method.invoke(Method.java:511)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1036)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
11月9日至12日:05:54.590:E / AndroidRuntime(30919):在dalvik.system.NativeStart.main(本机方法)


解决方案

如果在NPE被抛出这一行:

  Log.d(catArrayList:尺寸:新,+ categoryArrayList.size());

那么它抛出的理由是, categoryArrayList ...在程序中的该点

检查该变量被正确初始化。

我也强烈怀疑您正在运行的code是什么您在这个问题告诉我们不同。按我的理解,这是不可能的 categoryArrayList 在这一点上。如果是,那么NPE会被扔在两行previously:

  C类= categoryArrayList.get(0);

其实,如果应用程序是多线程的,而另一个线程更新 categoryArrayList 并联运行此方法这个线程,则变量可能会因为一场比赛成为空-条件。但是,我希望,这将只有极偶尔发生。

我想,另一种可能性是, c.getTypeArrayList()呼叫更新 categoryArrayList 作为一个副作用效果。

和第三种可能性是,NPE的的发生在你说行了。

Getting NullPointerException in ArrayList. I'm using the line below to log size of ArrayList but I always get NPE.

What could be the reason?

 Log.d("catArrayList:Size:New", ""+categoryArrayList.size());

Here is some more code :

    protected void onPostExecute(Boolean result) {
        dialog.cancel();                 

        Log.d("catArrayList:Size", ""+categoryArrayList.size());
        Log.d("typArrayList:Size", ""+typeArrayList.size());
        Log.d("serArrayList:Size", ""+serviceArrayList.size());

        Log.d("cArrayList:Size", ""+cArrayList.size());
        Log.d("tArrayList:Size", ""+tArrayList.size());
        Log.d("sArrayList:Size", ""+sArrayList.size());

        Category c = categoryArrayList.get(0);      
        typeArrayList = c.getTypeArrayList();
        Log.d("catArrayList:Size:New", ""+categoryArrayList.size());

        for(int i=0;i<typeArrayList.size();i++) {
            tArrayList.add(typeArrayList.get(i).getName());
        }

        spinner1.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                 android.R.layout.simple_spinner_dropdown_item,
                 cArrayList));

        spinner2.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                android.R.layout.simple_spinner_dropdown_item,
                tArrayList));

        spinner3.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                android.R.layout.simple_spinner_dropdown_item,
                sArrayList));

     }

Log says:

 09-12 11:05:54.585: D/catArrayList:Size(30919): 2
09-12 11:05:54.585: D/typArrayList:Size(30919): 2
09-12 11:05:54.585: D/serArrayList:Size(30919): 2
09-12 11:05:54.585: D/cArrayList:Size(30919): 2
09-12 11:05:54.590: D/tArrayList:Size(30919): 2
09-12 11:05:54.590: D/sArrayList:Size(30919): 2
09-12 11:05:54.590: D/AndroidRuntime(30919): Shutting down VM
09-12 11:05:54.590: W/dalvikvm(30919): threadid=1: thread exiting with uncaught exception (group=0x40f9f2a0)
09-12 11:05:54.590: E/AndroidRuntime(30919): FATAL EXCEPTION: main
09-12 11:05:54.590: E/AndroidRuntime(30919): java.lang.NullPointerException
09-12 11:05:54.590: E/AndroidRuntime(30919):    at com.example.modulewise.CategoryActivity$JSONAsyncTask.onPostExecute(CategoryActivity.java:178)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at com.example.modulewise.CategoryActivity$JSONAsyncTask.onPostExecute(CategoryActivity.java:1)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at android.os.AsyncTask.finish(AsyncTask.java:631)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at android.os.Looper.loop(Looper.java:137)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at android.app.ActivityThread.main(ActivityThread.java:4921)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at java.lang.reflect.Method.invokeNative(Native Method)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at java.lang.reflect.Method.invoke(Method.java:511)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
09-12 11:05:54.590: E/AndroidRuntime(30919):    at dalvik.system.NativeStart.main(Native Method)

解决方案

If the NPE is thrown on this line:

    Log.d("catArrayList:Size:New", ""+categoryArrayList.size());

then the reason it is being thrown is that categoryArrayList is null ... at that point in the program.

Check that that variable is being initialized correctly.

I also strongly suspect that the code that you are running is different to what you have shown us in the question. By my reading, it is impossible for categoryArrayList to be null at that point. If it was, then an NPE would have been thrown two lines previously at:

    Category c = categoryArrayList.get(0);

Actually, if the application is multi-threaded, and another thread updates categoryArrayList in parallel with this thread running this method, then the variable could become null due to a race-condition. However, I would expect that this would only happen very occasionally.

I guess, another possibility is that the c.getTypeArrayList() call is updating categoryArrayList as a side-effect.

And a third possibility is that the NPE doesn't occur at the line you said.

这篇关于ArrayList的空指针异常的onPostExecute()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆