当我在其他Activity中使用MainActivity中的方法时,我的Android应用程序崩溃了

时间:2015-07-13 11:44:42

标签: java android android-studio

我有两项活动Additempublic 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); }

MainActivity中的

我有这个方法:

tasklist

它会更新Mainscreen上的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(); } 中,在保存它返回的任务时,应用程序崩溃并重新启动。

由于错误,我得到了这个:

  

引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.widget.ListView.setAdapter(android.widget.ListAdapter)'

这是我在Additem中使用updateUI()的代码:

awk -F ', ' '{
   split($1, a, " ");
   k=a[2] OFS a[3];
   if(!(k in c))
      b[++n]=k;
   c[k]++;
   sum[k]+=$2
}
END{
   for(i=1; i<=n; i++)
      printf "%s - %.2f\n", b[i], (sum[b[i]]/c[b[i]])
}' file
Jul 5 - 97.00
Jul 6 - 87.67
Jul 7 - 97.00
Jul 8 - 98.00
Jul 9 - 100.00
Jul 10 - 100.00
Jul 11 - 73.00

有人可以帮我解决这个问题吗?

提前致谢,

亲切的问候,塞林

2 个答案:

答案 0 :(得分:2)

您的列表视图为空,当您从其他活动(当MainActivity暂停/停止时)调用它时,您实际上正在执行导致崩溃的null.setAdapter

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

答案 1 :(得分:0)

我建议您初始化listView中的listAdapterMainActivity,在更新用户界面中,只需使用

刷新视图
listAdapter.notifyDataSetChanged()