NullPointerException即使什么都不是null?

时间:2016-01-30 21:53:32

标签: java android arrays database string

我查看了所有代码,但是我找不到任何空引用,所以我迷失了。我正在保存用户收集到共享首选项中的某些联系人:

   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();

2 个答案:

答案 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);