Java 执行代码时,sqlite中出现错误=CursorIndexOutOfBoundsException

Java 执行代码时,sqlite中出现错误=CursorIndexOutOfBoundsException,java,android,android-sqlite,android-cursor,android-database,Java,Android,Android Sqlite,Android Cursor,Android Database,这是我的SqlLite查询代码,我在其中定义了一个方法,从类别中获取颜色类别,并将其作为字符串返回给该方法 public String getCategoryColor(String task) { SQLiteDatabase db = this.getReadableDatabase(); Cursor res = db.rawQuery( "select color from categories where title='"+task+"'", null );

这是我的SqlLite查询代码,我在其中定义了一个方法,从类别中获取颜色类别,并将其作为字符串返回给该方法

public String getCategoryColor(String task) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res =  db.rawQuery( "select color from categories where title='"+task+"'", null );
    return res.getString(0);
}
代码


公共抽象布尔值moveToFirst()将光标移动到第一行。如果光标为空,此方法将返回false

返回移动是否成功

  if(cursor != null && cursor.moveToFirst()) {
    String id = cursor.getString(0);
    Log.v(id, id + "Color" );
    return color;
}

公共抽象布尔值moveToFirst()将光标移动到第一行。如果光标为空,此方法将返回false

返回移动是否成功

  if(cursor != null && cursor.moveToFirst()) {
    String id = cursor.getString(0);
    Log.v(id, id + "Color" );
    return color;
}

光标中没有结果。此外,还应使用
moveToNext()


光标中没有结果。此外,还应使用
moveToNext()


以下是完美的解决方案:

1.首先检查它是否为空,大小如下:

public String getCategoryColor(String task) {

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res =  db.rawQuery( "select color from categories where title='"+task+"'", null );
    if (res !=null && res.getCount > 0)
      {
         res.moveToFirst();
         return  res.getString(0);
       }
     else
      {
        return "";
      }    
}
  • 检查后,如下所示:
  • String color=db.getCategoryColor(“Android开发者”)


    希望对您有所帮助。

    以下是完美的解决方案:

    1.首先检查它是否为空,大小如下:

    public String getCategoryColor(String task) {
    
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res =  db.rawQuery( "select color from categories where title='"+task+"'", null );
        if (res !=null && res.getCount > 0)
          {
             res.moveToFirst();
             return  res.getString(0);
           }
         else
          {
            return "";
          }    
    }
    
  • 检查后,如下所示:
  • String color=db.getCategoryColor(“Android开发者”)

    希望对你有帮助。

    你没有打电话来

        cursor.moveToFirst()
    
    在获取字符串之前,这就是为什么您没有调用CurrIndexOutbound异常的原因

        cursor.moveToFirst()
    
    在获取字符串之前,这就是您获取CurrIndexOutofBond异常的原因

    您应该
    纠正
    您的
    getCategoryColor
    方法

    public String getCategoryColor(String task) 
    {
    
        SQLiteDatabase db = this.getReadableDatabase();
        String get_COLOR = "";
        String last_query = "SELECT color FROM categories WHERE title='"+ task+"'";
    
        Cursor c = db.rawQuery(last_query, null);
        if (c != null && c.moveToFirst()) 
        {
    
            get_COLOR = c.getString(0);
        }
        c.close();
        db.close();
        return get_COLOR;
    
    }
    

    您应该
    纠正
    您的
    getCategoryColor
    方法

    public String getCategoryColor(String task) 
    {
    
        SQLiteDatabase db = this.getReadableDatabase();
        String get_COLOR = "";
        String last_query = "SELECT color FROM categories WHERE title='"+ task+"'";
    
        Cursor c = db.rawQuery(last_query, null);
        if (c != null && c.moveToFirst()) 
        {
    
            get_COLOR = c.getString(0);
        }
        c.close();
        db.close();
        return get_COLOR;
    
    }
    

    共享错误logcat。光标中没有结果。您应该检查moveToFirst()返回的内容(很可能为false)。您还应该使用moveToNext(),而不是moveToFirst()。尝试记录
    res.getCount()。看起来是零我没有使用MOSTTOFFIRST()或moveToNext()。请在此处共享编辑的代码。谢谢谢谢@Intellijshare error logcat。光标中没有结果。您应该检查moveToFirst()返回的内容(很可能为false)。您还应该使用moveToNext(),而不是moveToFirst()。尝试记录
    res.getCount()。看起来是零。我没有使用MOSTTOFFIRST()或moveToNext()。请在此处共享编辑后的代码。谢谢谢谢@Intellij当curson计数为0时出现问题。当curson计数为0时出现问题。希望这对您有所帮助。希望这对您有所帮助。