调用其他 Activity 方法时显示 NullPointerException
When Calling Other Activity Method Showing NullPointerException
我有两个 activity(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
activity 调用此方法时,然后显示 NullPointerException
。为什么会出现这个问题?我经常遇到这样的问题。我用另一种方式解决了这个问题,但不知道为什么会出现这个问题。请解释一下。
你绝对不能用关键字new
实例化一个Activity
。只有 Android 可以实例化 Android 个组件(Activity
、Service
、BroadcastReceiver
、Provider
)。当您使用 new
实例化 Android
组件时,Context
未正确设置,这就是您获得 NullPointerException
.
的原因
为了解决这个问题,您可以将您的方法 databaseLoader()
声明为 static
并向其中传递一个 Context
参数,以便在必要时使用。从任何 Activity
调用此方法时,您可以将 this
作为 Context
参数传递。
此外,还不清楚为什么您需要在 onBackPressed()
中加载数据库,因为 onBackPressed()
无论如何都会完成 Activity
,它将被销毁。这似乎很奇怪。
我有两个 activity(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
activity 调用此方法时,然后显示 NullPointerException
。为什么会出现这个问题?我经常遇到这样的问题。我用另一种方式解决了这个问题,但不知道为什么会出现这个问题。请解释一下。
你绝对不能用关键字new
实例化一个Activity
。只有 Android 可以实例化 Android 个组件(Activity
、Service
、BroadcastReceiver
、Provider
)。当您使用 new
实例化 Android
组件时,Context
未正确设置,这就是您获得 NullPointerException
.
为了解决这个问题,您可以将您的方法 databaseLoader()
声明为 static
并向其中传递一个 Context
参数,以便在必要时使用。从任何 Activity
调用此方法时,您可以将 this
作为 Context
参数传递。
此外,还不清楚为什么您需要在 onBackPressed()
中加载数据库,因为 onBackPressed()
无论如何都会完成 Activity
,它将被销毁。这似乎很奇怪。