我有两个活动(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
。为什么会出现这个问题?我经常遇到这种问题。我用另一种方式解决了这类问题,但不知道为什么会这样。请给我解释一下。
答案 0 :(得分:1)
您绝对不能使用关键字Activity
实例化new
。仅Android可以实例化Android组件(Activity
,Service
,BroadcastReceiver
,Provider
)。当您使用Context
实例化Android
组件时,new
的设置不正确,这就是为什么获得NullPointerException
的原因。
要解决此问题,您可以将方法databaseLoader()
声明为static
,并向其中传递一个Context
参数,该参数可以根据需要使用。从任何Activity
调用此方法时,都可以将this
作为Context
参数传递。
也不清楚,为什么需要在onBackPressed()
中加载数据库,因为onBackPressed()
只是完成了Activity
并将被销毁。这似乎很奇怪。