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);
}
...
}