【问题标题】:cursor initialization error [android]光标初始化错误 [android]
【发布时间】:2014-04-09 13:10:16
【问题描述】:
    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;
}

错误:无法从 CursorWindow 读取第 0 行第 8 列。确保 Cursor 在从中访问数据之前已正确初始化。

无法从 SQLiteDatabase 获取任何数据

谢谢

【问题讨论】:

  • 将位置从 (1-8) 更改为 (0-7)

标签: android android-cursor


【解决方案1】:

在游标中,列索引从 0 开始。

也就是说,如果您想从第一列获取数据,那么您应该使用 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 列中获取数据。

【讨论】:

    【解决方案2】:

    更改从 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));
          }
    

    【讨论】:

      【解决方案3】:

      尝试使用以下代码:使用 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();
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-16
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        相关资源
        最近更新 更多