调用显示NullPointerException的其他活动方法时

时间:2019-01-04 14:01:36

标签: android android-activity android-context

我有两个活动(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活动中调用此方法时,然后显示NullPointerException。为什么会出现这个问题?我经常遇到这种问题。我用另一种方式解决了这类问题,但不知道为什么会这样。请给我解释一下。

1 个答案:

答案 0 :(得分:1)

绝对不能使用关键字Activity实例化new。仅Android可以实例化Android组件(ActivityServiceBroadcastReceiverProvider)。当您使用Context实例化Android组件时,new的设置不正确,这就是为什么获得NullPointerException的原因。

要解决此问题,您可以将方法databaseLoader()声明为static,并向其中传递一个Context参数,该参数可以根据需要使用。从任何Activity调用此方法时,都可以将this作为Context参数传递。


也不清楚,为什么需要在onBackPressed()中加载数据库,因为onBackPressed()只是完成了Activity并将被销毁。这似乎很奇怪。