Java “上的空指针异常”;getWritableDatabase";从适配器类调用时

Java “上的空指针异常”;getWritableDatabase";从适配器类调用时,java,android,Java,Android,我读过一些非常相似的问题,但我得到的是想法,而不是问题的答案。 在我的主要活动课上,我有以下几点 public void updateUI() { helper = new TaskDBHelper(MainActivity.this); SQLiteDatabase sqlDB = helper.getReadableDatabase(); Cursor cursor = sqlDB.query(TaskContract.TABLE, new S

我读过一些非常相似的问题,但我得到的是想法,而不是问题的答案。 在我的主要活动课上,我有以下几点

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

}
其中:

public class TaskDBHelper extends SQLiteOpenHelper { ...
下面是我用来从datbase中删除元素的代码(这个方法在MainActivity中,它是从我的适配器类调用的。我在视图中有一个按钮,我从它的onClick方法调用它):

好了,问题来了。在deleteTask函数中,当尝试“getWritableDatabase”时,我得到一个空指针异常。通过阅读类似的问题,我发现上下文有问题,所以我检查了“MainActivity.this”的值,我得到了以下差异pn“mFragments”:

在updateUI(应用程序启动后,此情况除外):

在deleteTask(尝试从我的列表中删除项目)

编辑:以下是堆栈跟踪:

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)

我知道空是个问题,但我不知道如何解决。。。有什么线索吗?提前感谢

三个问题:如果这两种方法都在
MainActivity
类中,那么为什么要使用
helper=new taskdhelper(MainActivity.this)
而不是
helper=new taskdhelper(this)
?第二:为什么使用
helper=newtaskdbhelper(MainActivity.this)
helper=新的TaskDBHelper(MainActivity.this.getParent().getApplicationContext())?第三:stacktrace在哪里?谢谢你的回答,汤姆。我刚刚更新了这个问题。据我所知,我相信“MainActivity.this”等同于“this”。关于这个。getParen()。。。。我的错,代码只是主活动。这个。再次感谢。
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();
}
FragmentManager{423e8ad8 in MainActivity{423e7650}} 
FragmentManager{42512e28 in null}}
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)