我读过一些非常相似的问题,但我得到了这个想法,而不是我的问题的答案。 在我的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);
data = new ArrayList<PackageItem>();
listAdapter = new PackageAdapter(this, data);
cursor.moveToFirst();
do
{
PackageItem item = new PackageItem();
item.setName(cursor.getString(cursor.getColumnIndex(TaskContract.Columns.TASK)));
data.add(item);
} while (cursor.moveToNext());
// Display the list view
SwipeListView listView = (SwipeListView) findViewById(R.id.list);
listView.setAdapter(listAdapter);
}
“帮助者”在MainActivity中定义如下:
private TaskDBHelper helper;
其中:
public class TaskDBHelper extends SQLiteOpenHelper { ...
以下是我用来从数据库中删除元素的代码(此方法在MainActivity中,并且从我的适配器类调用。我在视图中有一个按钮,我从它的onClick方法调用它) :
public void deleteTask(View view) {
helper = new TaskDBHelper(MainActivity.this);
SQLiteDatabase sqlDB = helper.getWritableDatabase();
View v = (View) (view.getParent()).getParent();
TextView taskTextView = (TextView) v.findViewById(R.id.taskTextView);
String task = taskTextView.getText().toString();
String sql = String.format("DELETE FROM %s WHERE %s = '%s'",
TaskContract.TABLE,
TaskContract.Columns.TASK,
task);
sqlDB.execSQL(sql);
updateUI();
}
好的,这就是问题所在。在deleteTask函数中,当尝试“getWritableDatabase”时,我得到一个空指针异常。读到类似的问题,我发现上下文存在问题,所以我检查了“MainActivity.this”的值,我得到了以下差异:“mFragments”:
在updateUI上(启动应用程序后,这已经完成了):
FragmentManager{423e8ad8 in MainActivity{423e7650}}
在deleteTask(尝试从我的列表中删除项目)
FragmentManager{42512e28 in null}}
编辑:以下是stacktrace:
java.lang.NullPointerException
at com.mjdevelopments.todolist.MainActivity.deleteTask(MainActivity.java:155)
at com.mjdevelopments.todolist.PackageAdapter$1.onClick(PackageAdapter.java:87)
at android.view.View.performClick(View.java:4463)
at android.view.View$PerformClick.run(View.java:18770)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5296)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
我知道null是问题所在,但我不知道如何解决这个问题......任何线索?提前致谢