调用其他 Activity 方法时显示 NullPointerException

When Calling Other Activity Method Showing NullPointerException

我有两个 activity(PrivateContactActivity.javaAddContact.java)。 PrivateContactActivity里面有个方法:-

PrivateContactActivity.java

public void databaseLoader() {
    privateList.clear();
    myDatabase = new MyDatabase(PrivateContactActivity.this);
    Cursor cursor = myDatabase.queryData();
    StringBuilder stringBuilder = new StringBuilder();
    if (cursor.getCount() == 0) {
        Toast.makeText(this, "No Contact Found", Toast.LENGTH_SHORT).show();
    } else {
        while (cursor.moveToNext()) {
            String name, phone, email, address;
            name = cursor.getString(1);
            phone = cursor.getString(2);
            email = cursor.getString(3);
            address = cursor.getString(4);

            PrivateContactModel privateContactModel = new PrivateContactModel(name, phone, email, address);
            privateList.add(privateContactModel);
        }
    }
}

AddContact.java

@Override
public void onBackPressed() {
    PrivateContactActivity privateContactActivity = new PrivateContactActivity();
    privateContactActivity.databaseLoader();
    super.onBackPressed();
}

当我从 AddContact activity 调用此方法时,然后显示 NullPointerException。为什么会出现这个问题?我经常遇到这样的问题。我用另一种方式解决了这个问题,但不知道为什么会出现这个问题。请解释一下。

绝对不能用关键字new实例化一个Activity。只有 Android 可以实例化 Android 个组件(ActivityServiceBroadcastReceiverProvider)。当您使用 new 实例化 Android 组件时,Context 未正确设置,这就是您获得 NullPointerException.

的原因

为了解决这个问题,您可以将您的方法 databaseLoader() 声明为 static 并向其中传递一个 Context 参数,以便在必要时使用。从任何 Activity 调用此方法时,您可以将 this 作为 Context 参数传递。


此外,还不清楚为什么您需要在 onBackPressed() 中加载数据库,因为 onBackPressed() 无论如何都会完成 Activity,它将被销毁。这似乎很奇怪。