ArrayList的空指针异常的onPostExecute() [英] ArrayList Null Pointer Exception in 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屋!