2015-07-13 3 views
1

У меня есть два вида деятельности MainActivity и AdditemМои Android сбой приложения, когда я использую метод из MainActivity в другой деятельности

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

} 

Он обновляет tasklist на Mainscreen.

Но когда я использую updateUI(); в Additem, при сохранении задачи возвращается, но приложение аварийно завершает работу.

Как ошибки я получил это:

Вызванные: java.lang.NullPointerException: Попытка вызвать виртуальный метод 'недействительный android.widget.ListView.setAdapter (android.widget.ListAdapter)' на нуле ссылка на объект

Это мой код, где я использую updateUI() в AddItem:

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

Ваш списокView не существует в тот момент, когда вы вызываете метод. Это связано с тем, что активность неактивна и переработана для сохранения памяти. Вы никогда не должны обновлять пользовательский интерфейс из-за активности. –

ответ

2

Ваш ListView является недействительным и, когда вы вызываете его от другой деятельности [когда MainActivity паузы/остановлен] вы фактически делаете null.setAdapter, которая вызывает сбой ,

Вы должны опубликовать какое-либо событие в MainActivity и обновить список/адаптер при возобновлении MainActivity. ИЛИ вы всегда можете обновить/обновить адаптер в onCreate/onResume MainActivity.

+0

Спасибо, это сработало! :) –

0

Я хотел бы предложить вам инициализировать listView и listAdapter в вашем MainActivity и в обновление UI просто обновить представление с помощью

listAdapter.notifyDataSetChanged() 
Смежные вопросы