方法调用可能会产生java NullpointerException

时间:2014-12-23 23:06:53

标签: android cursor

我有一个代码:

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'

我怎么能解决它?

2 个答案:

答案 0 :(得分:21)

您的光标不能是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;
}  

答案 1 :(得分:0)

解决方案1:由于您正在对SQL进行硬编码,为什么不对索引进行硬编码

 updateNameEvent = mCursor.getString(0);

解决方案2:

try{
    updateNameEvent = mCursor.getString(mCursor.getColumnIndexOrThrow("name"));
}catch(IllegalArgumentException ie){
    updateNameEvent = 0; 
}
如果列不存在,

getColumnIndexOrThrow方法将抛出IllegalArgumentException。

解决方案1更快更简单。