RawQuery sqlite的空指针异常

时间:2013-12-28 08:23:16

标签: android sqlite nullpointerexception

在我的活动中想要传递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)

2 个答案:

答案 0 :(得分:0)

至少这是一个可能的NPE:

BookEntry book = null;

//...

if(cursor.getCount()!=0){
    book = new BookEntry();
    book.setTitle("can't use");
}else{
    book.setTitle("can use");
}

在else分支中,booknull

您的问题标题表明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)