ошибка инициализации курсора [android]

    public HashMap<String,String> getUserDetails(){
    HashMap<String,String> user = new HashMap<String,String>();
    String selectQuery = "SELECT  * FROM " + TABLE_LOGIN;
    System.out.println("select query:"+selectQuery);
    System.out.println("entering into hashmap");

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    // Move to first row
    cursor.moveToFirst();
    System.out.println("cursor count is");
    System.out.println(cursor.getCount());
    if(cursor.getCount() > 0){
        System.out.println("enter into if of hashmap");
        user.put("username", cursor.getString(1));
        user.put("name", cursor.getString(2));
        user.put("email", cursor.getString(3));
        user.put("user_id", cursor.getString(4));
        user.put("country", cursor.getString(5));
        user.put("state", cursor.getString(6));
        user.put("city", cursor.getString(7));
        user.put("registered_on", cursor.getString(8));
      }
    cursor.close();
    db.close();
    // return user
    return user;
}

ошибка: не удалось прочитать строку 0, столбец 8 из CursorWindow. убедитесь, что курсор правильно инициализирован, прежде чем обращаться к его данным.

не удалось получить какие-либо данные из SQLiteDatabase

Благодарность


person andy    schedule 09.04.2014    source источник
comment
изменить позицию с (1-8) на (0-7)   -  person Shayan Pourvatan    schedule 09.04.2014


Ответы (3)


В курсоре индекс столбца основан на 0.

То есть, если вы хотите получить данные из 1-го столбца, вам следует использовать cursor.getString(0) вместо cursor.getString(1).

Значит надо заменить

 if(cursor.getCount() > 0){
        System.out.println("enter into if of hashmap");
        user.put("username", cursor.getString(1));
        user.put("name", cursor.getString(2));
        user.put("email", cursor.getString(3));
        user.put("user_id", cursor.getString(4));
        user.put("country", cursor.getString(5));
        user.put("state", cursor.getString(6));
        user.put("city", cursor.getString(7));
        user.put("registered_on", cursor.getString(8));
      }

по следующему коду....

 if(cursor.getCount() > 0){
        System.out.println("enter into if of hashmap");
        user.put("username", cursor.getString(0));
        user.put("name", cursor.getString(1));
        user.put("email", cursor.getString(2));
        user.put("user_id", cursor.getString(3));
        user.put("country", cursor.getString(4));
        user.put("state", cursor.getString(5));
        user.put("city", cursor.getString(6));
        user.put("registered_on", cursor.getString(7));
      }

В вашем коде он пытается получить данные из 9-го столбца, которого не существует.

person Akshay Abhyankar    schedule 09.04.2014

Измените индекс курсора, который начинается с 1.. начните с 0 до 7., и он будет работать, как показано ниже:

if(cursor.getCount() > 0){
        user.put("username", cursor.getString(0));
        user.put("name", cursor.getString(1));
        user.put("email", cursor.getString(2));
        user.put("user_id", cursor.getString(3));
        user.put("country", cursor.getString(4));
        user.put("state", cursor.getString(5));
        user.put("city", cursor.getString(6));
        user.put("registered_on", cursor.getString(7));
      }
person Sagar Maiyad    schedule 09.04.2014

Попробуйте использовать этот код: используйте cursor.getString(0) вместо cursor.getString(1)

public HashMap<String,String> getUserDetails(){
ArrayList<HashMap<String, String>> wordList;
String selectQuery = "SELECT  * FROM " + TABLE_LOGIN;
System.out.println("select query:"+selectQuery);
System.out.println("entering into hashmap");

SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
 do
 {
  HashMap<String,String> user = new HashMap<String,String>();
  user.put("username", cursor.getString(0));
    user.put("name", cursor.getString(1));
    user.put("email", cursor.getString(2));
    user.put("user_id", cursor.getString(3));
    user.put("country", cursor.getString(4));
    user.put("state", cursor.getString(5));
    user.put("city", cursor.getString(6));
    user.put("registered_on", cursor.getString(7));
     wordList.add(user);
  }while(cursor.moveToNext);
    return wordList
}
  else
     {
       System.out.println("No data found");
       return null;
     }
  }

мы можем отображать данные, используя этот код.

 ArrayList<HashMap<String, String>> result;
 result= Objectname.getdetails();
 for(i=0;i<result.size();i++)
    {
         HashMap<String,String> content = new HashMap<String, String>();
         content = result.get(i);
               String username=content.get("username").toString();
                String name=content.get("name").toString();
                String email=content.get("email").toString();
                String uid=content.get("user_id").toString();
                String country=content.get("country").toString();
                String state=content.get("state").toString();
                String city=content.get("city").toString();
                String reg=content.get("registered_on").toString();

    }
person user3506595    schedule 09.04.2014