【问题标题】:Null Pointer Exception for RawQuery sqlite [closed]RawQuery sqlite的空指针异常[关闭]
【发布时间】:2013-12-28 08:23:16
【问题描述】:

在我想要传递标题名称以在 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)

【问题讨论】:

  • 没事的兄弟
  • 空指针在哪里调试并告诉我们
  • 你在哪里得到空指针异常?发布日志
  • 请在我的编辑问题中再次检查
  • @user3001046 请给答案投票

标签: android sqlite nullpointerexception


【解决方案1】:
if title is null. title.getTitle obviously null pointer exception
if(title == null){
    Toast.makeText(context, title.getTitle(), Toast.LENGTH_LONG).show();
}

书籍没有为 else 初始化

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)

【讨论】:

  • 这是真的,但没有解释堆栈跟踪。代码有多个问题...
  • @laalto 但根据用户的说法,他说 db 很好。
【解决方案2】:

至少这里有一种可能的 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() 有关。代码 sn-p 没有显示您如何初始化您在getTitle() 中使用的db,它也可能是null。请注意,db 有两个潜在范围 - 第一个范围是非空的(正如您在 cmets 中所说),因为您可以在没有 NPE 的情况下调用 db.getTitle(),但在 getTitle() 内部却是另一回事。

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多