android-init arrayadapter,获取nullpointer异常
我正在设置一个基本的阵列适配器。当我旋转屏幕几次时,就会出现空指针异常android-init arrayadapter,获取nullpointer异常,android,listview,nullpointerexception,Android,Listview,Nullpointerexception,我正在设置一个基本的阵列适配器。当我旋转屏幕几次时,就会出现空指针异常 public void testListView(){ my_array_list.add("hello world 1"); my_array_list.add("hello world 2"); my_array_list.add("hello world 3"); //next line does the problem ArrayAdapter<String&g
public void testListView(){
my_array_list.add("hello world 1");
my_array_list.add("hello world 2");
my_array_list.add("hello world 3");
//next line does the problem
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, my_array_list);
mListView.setAdapter(arrayAdapter);
}
public void testListView(){
我的数组列表。添加(“你好世界1”);
我的数组列表。添加(“hello world 2”);
我的数组列表。添加(“hello world 3”);
//下一行解决这个问题
ArrayAdapter ArrayAdapter=新的ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,my_array_list);
setAdapter(arrayAdapter);
}
这是我的onCreateView()
@覆盖
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图v=充气机。充气(右布局。显影剂测试侧,容器,假);
...
my_array_list=新建ArrayList();
mListView=(ListView)v.findViewById(R.id.my_ListView);
testListView();
}
以下是logcat输出:
04-27 20:10:45.985 11813-11813/com.rivler.example E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.rivler.example, PID: 11813
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153)
at com.example.rivler.DeveloperTestSide.testListView(DeveloperTestSide.java:116)
at com.example.rivler.DeveloperTestSide$6.run(DeveloperTestSide.java:149)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
04-27 20:10:45.985 11813-11813/com.rivler.example E/AndroidRuntime﹕ 致命异常:主
进程:com.rivler.example,PID:11813
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.Object android.content.Context.getSystemService(java.lang.String)”
位于android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
在android.widget.ArrayAdapter。(ArrayAdapter.java:153)
位于com.example.rivler.DeveloperTestSide.testListView(DeveloperTestSide.java:116)
位于com.example.rivler.DeveloperTestSide$6.run(DeveloperTestSide.java:149)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5312)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
可能是什么问题?听起来视图正在被破坏,代码仍在试图访问现在不存在的组件(我猜getActivity()返回null)。屏幕方向的更改将导致视图被破坏
尝试将逻辑移到onResume中 每次旋转屏幕时,都会重新创建保存片段的活动。
片段
本身被重新创建并再次附加到活动
如果片段
尚未附加或活动
本身未重新创建,则调用getActivity()
将返回NULL(也就是说,我们还没有达到onActivityCreated()
生命周期方法)。这会导致ArrayAdapter
中出现NullPointerException
要解决您的问题,只需将您的上下文保存在onAttach()
方法中并使用它。另一个选项是始终使用isAdded()
包装对getActivity()
的调用,如下所示:
if (isAdded()) {
// code that needs getActivity()
}
如果您不需要或不希望在此活动上进行屏幕旋转,则可以将以下内容添加到清单中
<activity
android:name=".MainActivity"
android:screenOrientation="portrait">
</activity>
这首先不允许旋转,所以你的碎片永远不会被摧毁。当然,如果需要,您可以告诉它是横向的。getActivity返回null,因为您的方法在线程中调用,而不考虑是否附加了片段。不幸的是,可能的重复仍然发生在我身上,即使我检查是否添加了片段。
<activity
android:name=".MainActivity"
android:screenOrientation="portrait">
</activity>