从适配器类调用时,“getWritableDatabase”上的NullPointer异常

时间:2015-06-27 14:58:19

标签: java android

我读过一些非常相似的问题,但我得到了这个想法,而不是我的问题的答案。 在我的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是问题所在,但我不知道如何解决这个问题......任何线索?提前致谢

0 个答案:

没有答案