Android CursorIndexOutOfBoundsException对cursor.getString(i)的影响

Android CursorIndexOutOfBoundsException对cursor.getString(i)的影响,android,sqlite,Android,Sqlite,我的代码中有一个检查数据库内容的方法。代码如下: if(rowId >= 1){ Cursor cursor = adapter.fetchAllQRurl(); int length = cursor.getCount(); for( int i=0; i<length ; i++){ if(contents.equals(cursor.getString(i))){ Toast

我的代码中有一个检查数据库内容的方法。代码如下:

    if(rowId  >= 1){

        Cursor cursor = adapter.fetchAllQRurl();
        int length = cursor.getCount();

        for( int i=0; i<length ; i++){
           if(contents.equals(cursor.getString(i))){
          Toast.makeText(this, "The entry already exists.",Toast.LENGTH_LONG).show();
        }
    }

您的代码中有几个问题:

  • 在尝试使用()访问列之前,需要移动到第一行
  • cursor.getCount()
    返回行数。但是,在循环中使用的是
    cursor.getString(i)
    ,用于访问第n列

    • 您的代码中有几个问题:

      • 在尝试使用()访问列之前,需要移动到第一行
      • cursor.getCount()
        返回行数。但是,在循环中使用的是
        cursor.getString(i)
        ,用于访问第n列

      尝试用这种方法从光标获取值。 您需要将光标位置放在起点,以便它返回值

      Cursor cursor = adapter.fetchAllQRurl();
      if (cursor.moveToFirst()) {
          do {
              String Test = mNotesCursor.getString("Your_Column_Name");
          } while (cursor.moveToNext());
      }
      

      尝试使用这种方法从光标获取值。 您需要将光标位置放在起点,以便它返回值

      Cursor cursor = adapter.fetchAllQRurl();
      if (cursor.moveToFirst()) {
          do {
              String Test = mNotesCursor.getString("Your_Column_Name");
          } while (cursor.moveToNext());
      }
      

      从游标对象获取数据的更好方法是:

      if (cursor.moveToFirst()){
         do{
            String data = cursor.getString(i);
            // do what ever you want here
         }while(moveToNext());
      }
      cursor.close();
      

      从游标对象获取数据的更好方法是:

      if (cursor.moveToFirst()){
         do{
            String data = cursor.getString(i);
            // do what ever you want here
         }while(moveToNext());
      }
      cursor.close();
      

      我尝试了这个方法:for(int i=0;i为什么要将光标代码放在for循环中,不需要放它。因为columnIndex不应该硬编码。所以我的方法是将光标代码放在for循环中,以指定获取字符串的列。另一个问题,如何指定行号?异常是“从第0列第1列获取字段槽”,我是否正确理解了我必须指定它?如果我有很多问题,我很抱歉。我在这方面是新手。谢谢。我现在了解了这个概念。但我仍然不明白为什么会出现这种例外。带有“从第0列第1列获取字段槽”的那个我尝试了这个:因为(int i=0;i为什么要将光标代码放入for循环中,无需放入。因为columnIndex不应硬编码。因此,我的方法是将光标代码放入for循环中,以指定要获取字符串的列。另一个问题是,如何指定行号?异常是“从第0行获取字段槽列1”,我是否正确理解了我必须指定它?如果我有很多问题,我很抱歉。我在这方面是新手。谢谢。我现在了解了这个概念。但我仍然不明白为什么我会有这样的例外。带有“从第0行第1列获取字段槽”的例外