Java 当我在其他活动中使用MainActivity的方法时,我的Android应用程序崩溃
我有两个活动Java 当我在其他活动中使用MainActivity的方法时,我的Android应用程序崩溃,java,android,android-studio,Java,Android,Android Studio,我有两个活动main活动和Additem 在MainActivity中,我有以下方法: public void updateUI() { helper = new TaskDBHelper(MainActivity.this); SQLiteDatabase sqlDB = helper.getReadableDatabase(); Cursor cursor = sqlDB.query(TaskContract.TABLE, new String
main活动
和Additem
在MainActivity中,我有以下方法:
public void updateUI() {
helper = new TaskDBHelper(MainActivity.this);
SQLiteDatabase sqlDB = helper.getReadableDatabase();
Cursor cursor = sqlDB.query(TaskContract.TABLE,
new String[]{TaskContract.Columns._ID, TaskContract.Columns.TASK},
null,null,null,null,null);
listAdapter = new SimpleCursorAdapter(
this,
R.layout.task_view,
cursor,
new String[] { TaskContract.Columns.TASK},
new int[] { R.id.taskTextView},
0
);
ListView listView = (ListView)findViewById(R.id.list);
listView.setAdapter(listAdapter);
}
它更新主屏幕上的任务列表
但是当我使用updateUI()
;在Additem
中,保存任务时返回,但应用程序崩溃并重新启动
作为错误,我得到了这个:
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.ListView.setAdapter(android.widget.ListAdapter)”
这是我在代码中使用updateUI()的附加项:
public void saveItem(View view){
EditText editText = (EditText)findViewById(R.id.editText);
String task = editText.getText().toString();
Log.d("Additem", task);
helper = new TaskDBHelper(Additem.this);
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.clear();
values.put(TaskContract.Columns.TASK, task);
db.insertWithOnConflict(TaskContract.TABLE, null, values,
SQLiteDatabase.CONFLICT_IGNORE);
updateUI();
finish();
}
有人能帮我解决这个问题吗
提前感谢,
您好,Selin您的listview为空,当您从其他活动调用它时[当MainActivity暂停/停止时],您实际上正在执行导致崩溃的null.setAdapter
您应该向MainActivity发布某种事件,并在MainActivity恢复时更新列表/适配器。或者您可以始终在MainActivity的onCreate
/onResume
中刷新/更新适配器。我建议您在MainActivity
中初始化listView
和listAdapter
,并在更新UI中使用
listAdapter.notifyDataSetChanged()
请发布一个崩溃日志(或者检查一下,你就会知道…),这样就可以知道是什么原因导致了它,以及为什么需要你的建议。我编辑了我的问题:)当你调用该方法时,你的listView不存在。这是因为该活动未处于活动状态,已被回收以节省内存。您不应该从活动外部更新UI。请在此处显示您称之为function@AdnanElezovic谢谢但当应用程序返回主屏幕时,它不会显示列表的最后版本。