2014-01-22 78 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

相关问题