Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android-init arrayadapter,获取nullpointer异常_Android_Listview_Nullpointerexception - Fatal编程技术网

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>