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)