【问题标题】:Method invocation may produce java NullpointerException方法调用可能产生 java NullpointerException
【发布时间】:2015-02-22 02:58:14
【问题描述】:

我有一个代码:

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'

请问我该如何解决?

【问题讨论】:

  • 为什么不只是 mCursor.getString(1);
  • 这里有一个想法,如果mCursor 为空并且您拨打电话mCursor.getColumnIndex("name") 会发生什么?
  • 我在这里提供了一个答案:stackoverflow.com/questions/46519388/…

标签: android android-cursor


【解决方案1】:

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

【讨论】:

  • 这不会仍然产生相同的警告:Warning:(173, 45) Method invocation 'mCursor.getColumnIndex("name")' may produce 'java.lang.NullPointerException'
  • 我已经编辑了我的答案。我不确定 rawQuery 是否可以返回空值。我认为不能,所以警告是 IDE 错误。但如果可以 - 那么我的。无论如何,它应该检查光标是否具有我认为的值。
  • 好的,现在 Orest 编辑的解决方案正在工作,只是我需要初始化 String updateNameEvent = null; .谢谢!
【解决方案2】:

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

 updateNameEvent = mCursor.getString(0);

解决方案 2:

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

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

解决方案 1 更快更简单。

【讨论】:

  • 既然他能赶上NullPointerException,为什么还要改变它?
  • 使用NullPointer,还是需要检查return -1
猜你喜欢
  • 2020-11-05
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 2016-10-25
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多