Android 为什么我在“getResources().getStringArray()”中获得NullPointerException,而活动已经创建?

Android 为什么我在“getResources().getStringArray()”中获得NullPointerException,而活动已经创建?,android,android-fragments,nullpointerexception,android-resources,android-context,Android,Android Fragments,Nullpointerexception,Android Resources,Android Context,当活动已经创建/上下文已经初始化时,我为什么要获得NPE 解释: 我在片段的onActivityCreated方法中,该方法确保活动已经创建,因此上下文已经初始化。我得到的应用程序资源如下: @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ... Reso

活动
已经创建/
上下文
已经初始化时,我为什么要获得NPE

解释:

我在片段的
onActivityCreated
方法中,该方法确保
活动
已经创建,因此
上下文
已经初始化。我得到的应用程序资源如下:

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ...
        Resources appResources = getActivity().getResources();
        Log.i(TAG, "APPRESOURCES >>> " + appResources.toString());//check
        ExpandableRecyclerViewAdapter expandableRecyclerView = new ExpandableRecyclerViewAdapter(getActivity(), populateList(appResources));
        ...
    }
上面的
Log.i
语句打印出来

APPRESOURCES >>> android.content.res.Resources@45fbef68

在上面调用的
populateList(appResources)
方法中,我创建了
MyParentObject
的对象,并将
appResources
传递给其构造函数:

private List<ParentObject> populateList(Resources appResources) {
        ...
        MyParentObject myParentObject = new MyParentObject(appResources);
        ...
}
分配
喷丝头字段的语句是我获取NPE的地方。



注意:最初,我传递的是一个
上下文
对象,该对象是从片段的
onActivityCreated()
中的
getActivity()
获取的。但是在这个NPE的调试过程中,我改为传递
appResources
对象。

这个解决方案的功劳归于Selvin的评论。字段必须在构造函数之前声明,然后我在构造函数中初始化它,如下所示:

public class MyParentObject implements ParentObject {   
        private String [] spinnerFields;     
        ...
        public MyParentObject(Resources appResources) {         
            spinnerFields = appResources.getStringArray(R.array.spinnerFields_arrayResource);   
        }
        ...     
}

你是在哪一行发生崩溃的?java的基础知识。。。先做什么?构造函数还是字段初始值设定项@黑带在最后一段,最后一句话!分配
喷丝头字段的字段
。我在上面添加了
/************************
。漂亮的捕获@Selvin..我回答了吗?不你做到了…我只是给你一个提示。。。所以自己写下答案:)
public class MyParentObject implements ParentObject {   
        private String [] spinnerFields;     
        ...
        public MyParentObject(Resources appResources) {         
            spinnerFields = appResources.getStringArray(R.array.spinnerFields_arrayResource);   
        }
        ...     
}