При вызове другого метода действия, показывающего исключение NullPointerException - PullRequest
0 голосов
/ 04 января 2019

У меня две активности (PrivateContactActivity.java и AddContact.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 голосов
/ 04 января 2019

Вы абсолютно не можете создать экземпляр Activity с ключевым словом new.Только Android может создавать экземпляры компонентов Android (Activity, Service, BroadcastReceiver, Provider).Context настроен неправильно, когда вы создаете экземпляр компонента Android, используя new, поэтому вы получаете NullPointerException.

Чтобы обойти это, вы можете объявить свой метод databaseLoader() as static и передать в него аргумент Context, который можно использовать при необходимости.При вызове этого метода из любого Activity вы можете передать this в качестве аргумента Context.


Кроме того, неясно, зачем вам нужно загружать базу данных в onBackPressed(), поскольку onBackPressed() просто заканчивает Activity в любом случае, и он будет уничтожен.Это кажется странным.

...