2015-07-13 143 views
1

使用来自MainActivity方法我有两个活动MainActivityAdditem我的Android应用程序崩溃,当我在其他活动

在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); 

} 

它更新的Mainscreentasklist

但是当我使用updateUI();在Additem,保存任务它返回,但应用程序崩溃重新启动自己。

作为错误我得到这个:

引起:显示java.lang.NullPointerException:尝试调用虚拟方法 '无效android.widget.ListView.setAdapter(android.widget.ListAdapter)' 上的空对象引用

这是我的代码,我在ADDITEM使用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(); 
} 

有人能帮助我解决这个问题?

由于提前,

亲切的问候,塞林

+0

请发表日志刷新视图(或检查,你就会知道..)的崩溃,所以它可以知道是什么造成它,为什么 – user2450263

+0

感谢您的意见,我编辑了我的问题:) –

+0

您调用该方法时,您的listView不存在。这是因为该活动未处于活动状态并已被回收以节省内存。您不应该从活动外更新UI。 –

回答

2

你的列表视图为空,当你从其他活动称之为[当在MainActivity暂停/停止]你实际上是在做null.setAdapter这是造成死机。

您应该向MainActivity发布某种事件,并在MainActivity恢复时更新列表/适配器。或者您可以随时刷新/更新MainActivity的onCreate/onResume中的适配器。

+0

感谢这工作! :) –

0

我建议你来初始化你MainActivity和更新UI的listViewlistAdapter只需使用

listAdapter.notifyDataSetChanged() 
相关问题