2017-07-19 115 views
-5

我有一個名爲updateparty的數據庫,我必須從中創建一個hashmap string類型的數組列表。當我嘗試從數據庫檢索數據時,光標不會移動到下一個記錄。CursorOutofBoundsException索引-1請求的大小爲0

這裏是db插入代碼。

for (int i = 0; i < poslist.size(); i++) { 


       SQLiteDatabase db7 = db.getWritableDatabase(); 
       ContentValues values5= new ContentValues(); 
       values5.put(DBManager.TableInfo.KEYID, ID1); 
       values5.put(DBManager.TableInfo.DOCU, document); 
       values5.put(DBManager.TableInfo.ATTEND,attendancelist.get(i)); 
       values5.put(DBManager.TableInfo.EMAIL, emaillist.get(i)); 
       values5.put(DBManager.TableInfo.PARTY,partytypelist.get(i)); 
       values5.put(DBManager.TableInfo.BIO,biometriclist.get(i)); 
       values5.put(DBManager.TableInfo.KEY_LOGIN_USER,username2); 
       String condition5 = DBManager.TableInfo.DOCU + " =?"; 
       Cursor cursor5 = db7.query(DBManager.TableInfo.UPDATEPARTY, null, condition5, new String[]{DBManager.TableInfo.ATTEND}, null, null, null); 
       long status5 = db7.insert(DBManager.TableInfo.UPDATEPARTY, null, values5); 
       System.out.println("Parties insert : " + status5); 
       cursor5.close(); 
       db7.close(); 
      } 

代碼從上述DB創建的ArrayList:

public ArrayList<HashMap<String, String>>getPartypost(DBOperation db) { 
    ArrayList<HashMap<String, String>> listParties11 = new ArrayList<HashMap<String, String>>(); 

    try { 

     String query = "select * from " + DBManager.TableInfo.UPDATEPARTY + " where " + DBManager.TableInfo.KEY_LOGIN_USER + " = '" + GenericMethods.email + "'"; 
     System.out.println("query:"+query); 
     SQLiteDatabase sqlite1 = db.getWritableDatabase(); 
     Cursor c = sqlite1.rawQuery(query, null); 

     while(c.moveToNext()) { 
        HashMap<String, String> selectiondetails10 = new HashMap<String, String>(); 
      System.out.println("value:"+c.getString(c.getColumnIndex(DBManager.TableInfo.DOCU))); 
        selectiondetails10.put("document_id", c.getString(c.getColumnIndex(DBManager.TableInfo.DOCU))); 
        selectiondetails10.put("att_id", c.getString(c.getColumnIndex(DBManager.TableInfo.ATTEND))); 
        selectiondetails10.put("email", c.getString(c.getColumnIndex(DBManager.TableInfo.EMAIL))); 
        selectiondetails10.put("party_type", c.getString(c.getColumnIndex(DBManager.TableInfo.PARTY))); 
        selectiondetails10.put("biometric", c.getString(c.getColumnIndex(DBManager.TableInfo.BIO))); 
        selectiondetails10.put("exec_email", c.getString(c.getColumnIndex(DBManager.TableInfo.KEY_LOGIN_USER))); 

        listParties11.add(selectiondetails10); 

       } 

       closeCursor(c); 
      //} 
     // } 
     System.out.println("list size:"+listParties11.size()); 
     } catch (Exception e) { 
     // TODO: handle exception. 
     e.printStackTrace(); 
    } 
    db.close(); 
    return listParties11; 
} 

這是錯誤消息:

enter image description here

我需要的是建立一個數組列表,從這個數據庫

+0

錯誤是由該行給出的(c.isAfterLast()!):'而(c.moveToNext ())'。它是由光標爲空(查詢沒有返回任何記錄)引起的。 –

+0

是的..查詢是錯誤的。 – user7245

+0

無論如何,在移動它們之前,總要檢查光標是否有記錄。 –

回答

0

將您的插入代碼更改爲:

  SQLiteDatabase db7 = db.getWritableDatabase(); 
      ContentValues values5= new ContentValues(); 
      for (int i = 0; i < poslist.size(); i++) { 
      values5.put(DBManager.TableInfo.KEYID, ID1); 
      values5.put(DBManager.TableInfo.DOCU, document); 
      values5.put(DBManager.TableInfo.ATTEND,attendancelist.get(i)); 
      values5.put(DBManager.TableInfo.EMAIL, emaillist.get(i)); 
      values5.put(DBManager.TableInfo.PARTY,partytypelist.get(i)); 
      values5.put(DBManager.TableInfo.BIO,biometriclist.get(i)); 
      values5.put(DBManager.TableInfo.KEY_LOGIN_USER,username2); 
      String condition5 = DBManager.TableInfo.DOCU + " =?"; 
      Cursor cursor5 = db7.query(DBManager.TableInfo.UPDATEPARTY, null, condition5, new String[]{DBManager.TableInfo.ATTEND}, null, null, null); 
      long status5 = db7.insert(DBManager.TableInfo.UPDATEPARTY, null, values5); 
      System.out.println("Parties insert : " + status5); 
      cursor5.close(); 
      db7.close(); 
     } 
0

使用下面的代碼,while循環應該是這樣的:

public ArrayList<HashMap<String, String>>getPartypost(DBOperation db) { 
    ArrayList<HashMap<String, String>> listParties11 = new ArrayList<HashMap<String, String>>(); 

    try { 

     String query = "select * from " + DBManager.TableInfo.UPDATEPARTY + " where " + DBManager.TableInfo.KEY_LOGIN_USER + " = '" + GenericMethods.email + "'"; 
     System.out.println("query:"+query); 
     SQLiteDatabase sqlite1 = db.getWritableDatabase(); 
     Cursor c = sqlite1.rawQuery(query, null); 
      c.moveToFirst(); 
     while(!c.isAfterLast()) { 
        HashMap<String, String> selectiondetails10 = new HashMap<String, String>(); 
      System.out.println("value:"+c.getString(c.getColumnIndex(DBManager.TableInfo.DOCU))); 
        selectiondetails10.put("document_id", c.getString(c.getColumnIndex(DBManager.TableInfo.DOCU))); 
        selectiondetails10.put("att_id", c.getString(c.getColumnIndex(DBManager.TableInfo.ATTEND))); 
        selectiondetails10.put("email", c.getString(c.getColumnIndex(DBManager.TableInfo.EMAIL))); 
        selectiondetails10.put("party_type", c.getString(c.getColumnIndex(DBManager.TableInfo.PARTY))); 
        selectiondetails10.put("biometric", c.getString(c.getColumnIndex(DBManager.TableInfo.BIO))); 
        selectiondetails10.put("exec_email", c.getString(c.getColumnIndex(DBManager.TableInfo.KEY_LOGIN_USER))); 

        listParties11.add(selectiondetails10); 
c.moveToNext(); 
       } 

       closeCursor(c); 
      //} 
     // } 
     System.out.println("list size:"+listParties11.size()); 
     } catch (Exception e) { 
     // TODO: handle exception. 
     e.printStackTrace(); 
    } 
    db.close(); 
    return listParties11; 
} 
相關問題