方法调用可能会产生java NullpointerException

问题描述 投票:0回答:3

我有一个代码:

public String getNameUpdateEvent(long id) {
    Cursor mCursor =
            db.rawQuery("select name from events WHERE _id=" + id + ";", null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    String updateNameEvent;
    updateNameEvent = mCursor.getString(mCursor.getColumnIndex("name"));
    return updateNameEvent;
}    

我收到警告

    Warning:(173, 45) Method invocation 'mCursor.getColumnIndex("name")' may produce 'java.lang.NullPointerException'

我该如何解决它?

android android-cursor
3个回答
23
投票

你的光标不能是

null
,它总是有任何值。但是游标可以为空,所以你应该首先使用方法
moveToFirst()
转到游标中的第一行,如果它返回
true
- 这意味着该游标至少有一行,所以你可以用它做你想做的一切,如果它返回
false
- 这意味着您的查询没有任何内容,因此您没有任何行可以从中获取数据。您的代码应如下所示:

public String getNameUpdateEvent(long id) {
    Cursor mCursor =
        db.rawQuery("select name from events WHERE _id=" + id + ";", null);

    String updateNameEvent = null;
    if (mCursor != null && mCursor.moveToFirst()) {
        updateNameEvent = mCursor.getString(mCursor.getColumnIndex("name"));
    }
    return updateNameEvent;
}  

0
投票

解决方案1:既然你硬编码SQL,为什么不硬编码索引

 updateNameEvent = mCursor.getString(0);

解决方案2:

try{
    updateNameEvent = mCursor.getString(mCursor.getColumnIndexOrThrow("name"));
}catch(IllegalArgumentException ie){
    updateNameEvent = 0; 
}

如果列不存在,getColumnIndexOrThrow 方法将抛出 IllegalArgumentException。

解决方案 1 更快且简单。


0
投票

我遇到了这个问题:应用程序停止了我该如何修复它

日志猫: 方法调用“getReceiver”可能会产生“NullPointerException”

这是代码

if (chat.getReceiver().equals(myUid) && chat.getSender().equals(hisUid)) {
                    HashMap<String, Object> hasSeenHashMap = new HashMap<>();
                    hasSeenHashMap.put("isSeen", true);
                    ds.getRef().updateChildren(hasSeenHashMap);
                }
© www.soinside.com 2019 - 2024. All rights reserved.