【问题标题】:Android database query get nullPointerAndroid数据库查询获取nullPointer
【发布时间】:2013-08-11 06:10:34
【问题描述】:

我在查询数据库时遇到问题。 (sqlitedb)

我想查询数据库的 2 个选择,当我查询第一行时一切正常,但是当我想查询第二行时,我得到空指针。

看看我的代码:

public AbsenceData getAbsence( int _subjectId, long date ) {
    AbsenceData absence = null;
    Cursor cursor = null;
            cursor = mDb.query(
            ABSENCES_TABLE_NAME, 
            new String[] { ABSENCE_TYPE, ABSENCE_NOTE }, 
            SUBJECT_ID + "=?" + " AND " + ABSENCE_DATE + "=?", 
            new String[] { String.valueOf( _subjectId), String.valueOf( date ) },
            null, null, null
            );

    if( cursor.moveToFirst() ) {
        absence = new AbsenceData( 0, 0, 0l,cursor.getInt( 0 ), cursor.getString( 1 ));
    }
    return absence;
}

我有 2 个参数:subjectId 和日期, 例如。我查询 subjectId = 1, date = today - >> 我得到想要的数据, 但是当我查询 subjectId = 1, date = tomorrow - >> nullpointer,

还有什么在数据库中我可以看到明天的日期,所以它应该给我想要的数据,但它没有......

提前感谢您的帮助。

【问题讨论】:

    标签: android sql database null


    【解决方案1】:

    但是当我想查询第二行时,我得到空指针

    如果您假设可以有不止一行,我建议您使用正确的循环:

    if (c.moveToFirst()) {
       do {
          Absence a = new Absence();
          a.setName(c.getString(c.getColumnIndex("name")));
          ...
    
       } while (c.moveToNext());
    }
    

    特别是在您的情况下,您的 NPE 被抛出,因为如果您通过明天的日期,您的光标是 empty 并且您的条件不适用,因此您的缺席被分配给NULL 并以此状态返回。

    如果你想修复它,你需要像这样初始化你的对象:

    AbsenceData absence = new AbsenceDate();
    


    注意:如果您只创建参数,则需要添加默认构造函数。

    【讨论】:

      猜你喜欢
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多