簡體   English   中英

當我在其他Activity中使用MainActivity中的方法時,Android應用程序崩潰

[英]My Android app crashes when I use method from MainActivity in an other Activity

我有兩個活動MainActivityAdditem

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

}

它在主Mainscreen上更新tasklist Mainscreen

但是當我使用updateUI() Additem ,保存任務時它會返回,但應用程序崩潰會重新啟動。

作為錯誤,我得到了:

原因:java.lang.NullPointerException:嘗試在空對象引用上調用虛擬方法'void 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();
}

有人可以幫我解決這個問題嗎?

提前致謝,

親切的問候,塞琳

您的列表視圖為null,當您從其他活動中調用它時(當MainActivity暫停/停止時),您實際上是在執行null.setAdapter ,這會導致崩潰。

您應該向MainActivity發布某種事件,並在MainActivity恢復時更新列表/適配器。 或者,您始終可以在MainActivity的onCreate / onResume中刷新/更新適配器。

我建議您在MainActivity初始化listViewlistAdapter ,並在更新UI中通過使用刷新視圖

listAdapter.notifyDataSetChanged()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM