我有一个代码:
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'
我怎么能解决它?
答案 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更快更简单。