2015-07-13 144 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() 
相關問題