在我的活动中想要传递Title Name以在sqlite数据库中检查它是否有标题然后返回“不能使用”否则“可以使用”。但是我的数据库有些问题,我得到“空指针异常”。你可以帮助我,因为我是新人。谢谢你
这是我的活动代码
//check title name
BookEntry title = db.getTitle(str);
if(title == null){
Toast.makeText(context, title.getTitle(), Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, title.getTitle(), Toast.LENGTH_LONG).show();
}
这是我在数据库解决方案中的代码
//get title name where = str
public BookEntry getTitle(String str){
BookEntry book = null;
Cursor cursor = db.rawQuery("SELECT title FROM " +
BooksDBHelper.TABLE_BOOK + " WHERE "
+BooksDBHelper.KEY_TITLE + " = ? ",
new String[]{str});
cursor.moveToFirst();
if(cursor.getCount()!=0){
book = new BookEntry();
book.setTitle("can't use");
}else{
book.setTitle("can use");
}
return book;
}
这是logcat错误
12-28 15:06:46.016: E/AndroidRuntime(9889): FATAL EXCEPTION: main
12-28 15:06:46.016: E/AndroidRuntime(9889): java.lang.NullPointerException
12-28 15:06:46.016: E/AndroidRuntime(9889): at mutitablesql.db.BooksDB.getTitle(BooksDB.java:90)
12-28 15:06:46.016: E/AndroidRuntime(9889): at mainactvity.MainActivity$1$1.onClick(MainActivity.java:112)
12-28 15:06:46.016: E/AndroidRuntime(9889): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)
12-28 15:06:46.016: E/AndroidRuntime(9889): at android.os.Handler.dispatchMessage(Handler.java:99)
12-28 15:06:46.016: E/AndroidRuntime(9889): at android.os.Looper.loop(Looper.java:137)
12-28 15:06:46.016: E/AndroidRuntime(9889): at android.app.ActivityThread.main(ActivityThread.java:4921)
12-28 15:06:46.016: E/AndroidRuntime(9889): at java.lang.reflect.Method.invokeNative(Native Method)
12-28 15:06:46.016: E/AndroidRuntime(9889): at java.lang.reflect.Method.invoke(Method.java:511)
12-28 15:06:46.016: E/AndroidRuntime(9889): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
12-28 15:06:46.016: E/AndroidRuntime(9889): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
12-28 15:06:46.016: E/AndroidRuntime(9889): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
至少这是一个可能的NPE:
BookEntry book = null;
//...
if(cursor.getCount()!=0){
book = new BookEntry();
book.setTitle("can't use");
}else{
book.setTitle("can use");
}
在else分支中,book
为null
。
您的问题标题表明NPE与rawQuery()
有关。代码段不会显示您在db
中初始化getTitle()
的方式,也可能是null
。请注意db
有两个潜在的范围 - 在第一个范围内它是非空的(正如您在评论中所说的那样),因为您可以在没有NPE的情况下调用db.getTitle()
,但这里面的情况不同{ {1}}。
答案 1 :(得分:0)
if title is null. title.getTitle obviously null pointer exception
if(title == null){
Toast.makeText(context, title.getTitle(), Toast.LENGTH_LONG).show();
}
本书不是其他的
if(cursor.getCount()!=0){
book = new BookEntry();
book.setTitle("can't use");
}else{
book.setTitle("can use");
}
使用此logcat getTitle代码行失败。
at mutitablesql.db.BooksDB.getTitle(BooksDB.java:90)