我查看了所有代码,但是我找不到任何空引用,所以我迷失了。我正在保存用户收集到共享首选项中的某些联系人:
public void saveContacts() {
contacts = this.getSharedPreferences("contacts", MainActivity.MODE_PRIVATE); //Making a shared preferences
Set<String> set = new HashSet<String>();
set.addAll(contactArrayList);
contactEditor.clear(); //Clearing current values in shared pref
contactEditor.putStringSet("contactSetKey", set); //Adding contacts
contactEditor.commit();
Toast.makeText(MainActivity.this, "Contacts have been saved!", Toast.LENGTH_SHORT).show();
}
以下是我收到联系人的地方:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactArrayList= new ArrayList<String>();
listview = (ListView) findViewById(R.id.listView);
arrayAdapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, contactArrayList);
listview.setAdapter(arrayAdapter);
loadSavedStuff();
}
public void loadSavedStuff() {
//CLEAR CONTENTS OF ARRAYLIST AND GET THEM FROM SHARED PREFERENCE
if(contacts.getStringSet("contactSetKey", null) != null) {
contactArrayList.clear();
contactArrayList = new ArrayList<String>(contacts.getStringSet("contactSetKey", null));
arrayAdapter.notifyDataSetChanged();
}
}
我一直在我的列表中添加内容:
contactArrayList.add(contactName +" - " +contactNumber);
arrayAdapter.notifyDataSetChanged();
我的空指针异常在这里:
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Set android.content.SharedPreferences.getStringSet(java.lang.String, java.util.Set)' on a null object reference
指向此处:
if(contacts.getStringSet("contactSetKey", null) != null) {
在这里:
loadSavedStuff();
答案 0 :(得分:4)
您只有在getStringSet
不是null
时才会检查,而contacts
仍然是null
,这就是为什么它会抛出你{{} 1}}。
更改
NullPointerException
到
if(contacts.getStringSet("contactSetKey", null) != null) {
答案 1 :(得分:1)
您的contacts
引用为空。您在尝试调用方法之前尚未初始化 - 初始化位于saveContacts()
但未在onCreate()
和loadSavedStuff()
之前调用。
您缺少的初始代码:
contacts = this.getSharedPreferences("contacts", MainActivity.MODE_PRIVATE);