2017-07-19 8 views
-5

データベースからデータを取得しようとすると、カーソルが次のレコードに移動しません。これは、ハッシュマップ型の配列リストを作成する必要があるupdatepartyというデータベースです。CursorOutofBoundsException - 0のサイズでインデックス-1が要求されました

ここに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(); 
      } 

デシベル以上からのArrayListを作成するためのコード:

enter image description here

私は必要なものこのデシベル

からの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; 
} 

これは、エラーメッセージがあります

+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

ループはこのようにする必要がありながら、使用、次のコード: しばらく

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; 
} 
関連する問題