我有一个代码:
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'
我该如何解决它?
你的光标不能是
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:既然你硬编码SQL,为什么不硬编码索引
updateNameEvent = mCursor.getString(0);
解决方案2:
try{
updateNameEvent = mCursor.getString(mCursor.getColumnIndexOrThrow("name"));
}catch(IllegalArgumentException ie){
updateNameEvent = 0;
}
如果列不存在,getColumnIndexOrThrow 方法将抛出 IllegalArgumentException。
解决方案 1 更快且简单。
我遇到了这个问题:应用程序停止了我该如何修复它
日志猫: 方法调用“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);
}