2014-01-22 76 views
0

Hy Guys,我是初學者Android開發人員。我需要你的幫助。我想插入數據到sqlite tblorder和orderdtl的2個表中。在orderdtl我必須從列表視圖中的多個項目插入數據。我嘗試烘烤所有我想要插入的變量。他們都出現了。但是當我嘗試保存它。我得到這些錯誤。 這是我DBDataSource.java錯誤:CursorIndexOutOfBoundsException:索引0請求,大小爲0

public order createorder(String orderid, String notes, long outletid) { 
    ContentValues values = new ContentValues(); 
    values.put(DBHelper.ORDER_ID, orderid); // inserting a string 
    values.put(DBHelper.NOTES, notes); // inserting an int 
    values.put(DBHelper.OUTLET_ID, outletid); // inserting an int 

    long insertId = database.insert(DBHelper.TABLE_ORDER, null, 
      values); 
    Cursor cursor = database.query(DBHelper.TABLE_ORDER, 
      allorder, DBHelper.ORDER_ID + " = " + insertId, null, 
      null, null, null); 

     cursor.moveToFirst(); 
     order neworder = cursorToorder(cursor); 
     cursor.close(); 
     return neworder;} 
private order cursorToorder(Cursor cursor) { 
    order order = new order(); 
    order.setorderid(cursor.getString(cursor.getColumnIndex(DBHelper.ORDER_ID))); 
    order.setorderdate(cursor.getString(cursor.getColumnIndex(DBHelper.ORDER_DATE))); 
    order.setnotes(cursor.getString(cursor.getColumnIndex(DBHelper.NOTES))); 
    order.setoutletid(cursor.getLong(cursor.getColumnIndex(DBHelper.OUTLET_ID))); 
    return order; 
    } 

錯誤請參見該代碼

Cursor cursor = database.query(DBHelper.TABLE_ORDER, 
      allorder, DBHelper.ORDER_ID + " = " + insertId, null, 
      null, null, null); 

而這種代碼

order.setorderid(cursor.getString(cursor.getColumnIndex(DBHelper.ORDER_ID))); 

的OrderID是字符串,我嘗試從yyyyMMddHHmmss.this是讓代碼:

private String orderid(){ 
    SimpleDateFormat dateFormat = new SimpleDateFormat(
      "yyyyMMddHHmmss", Locale.getDefault()); 
    Date date = new Date(); 
    return dateFormat.format(date); 

} 我會非常感謝您給予的任何幫助。謝謝。

+0

在BackupDatastore中,爲什麼'getPlayer_8()'返回this._Player_1'?它不應該是'this._Player_8'嗎? – jaredk

+0

當我輸入線程時,這是一個錯誤。它實際上返回this._Player_8。仍然得到上述錯誤 – 2014-03-19 21:49:50

+0

「乾淨的安裝」是否意味着你已經卸載了應用程序,然後再次安裝它? – laalto

回答

1

該查詢與任何行都不匹配。檢查moveToFirst()的結果以查看操作是否成功,然後才能訪問遊標數據。

例子:

order neworder = null; 
if (cursor.moveToFirst()) { 
    order neworder = cursorToorder(cursor); 
} 
cursor.close(); 
return neworder; 

insertIdinsert()得到的是該行的sqlite的行ID。這可能與ORDER_ID不一樣。要將列作爲rowid的別名,請將其聲明爲INTEGER PRIMARY KEY

+0

你是對的,我忘了改變那些部分。主鍵應該是自動增量使用這些代碼。你記得我。謝謝alto – WardaLyn

1

我在logcat中看到的錯誤是不是_Player_8,但是對未知列「KEY_Team_Name」

的問題是在你的活動,行前的最後一個:

String EntryA =String.valueOf(db.getentry("Ravirrrr", "KEY_Team_Name")); 

它應該是:

String EntryA =String.valueOf(db.getentry("Ravirrrr", DatabaseHandler.KEY_Team_Name)); 

而DatabaseHandler應該將所有列名都公開,因爲getentry方法需要列名。

編輯:在下面的評論中添加一個問題的答案。 調用db.query之後,您應該檢查是否通過調用Cursor.isAfterLast()來獲得某些內容。如果爲true,則select返回空結果集。 在你的例子中,當代碼創建一個以「Ravi」作爲團隊名稱的條目時,你會得到一個空的結果集,然後要求一個名爲「Ravirrrr」的團隊。

+0

現在我得到的錯誤: CursorIndexOutOfBoundsException:索引0請求,大小爲0 – 2014-03-26 22:58:32

+0

請參閱編輯答案 – Timores

相關問題