我需要插入与Order
及其相应的Detail
相关的数据。Android - 如何将与两个表相关的数据传递给内容提供者的插入方法
如果没有ContentProvider
我会做这样的事情:
public boolean insertOrder(Order order, ArrayList<OrderDetail> items) {
boolean wasSuccessful = false;
ContentValues cvOrder = new ContentValues();
cvPedido.put(ORDER_CUSTOMER_ID, order.getCustomerId());
cvPedido.put(ORDER_CUSTOMER_NAME, order.getCustomerName());
String insertQuery = "INSERT INTO " + ORDER_DETAIL_TABLE
+ " VALUES (?,?)";
//...
try {
this.openWriteableDB();
SQLiteStatement statement = db.compileStatement(insertQuery);
db.beginTransaction();
long idOrder = db.insertOrThrow(ORDER_TABLE, null, cvOrder);
if (idOrder > 0) {
for (int i = 0; i < items.size(); i++) {
OrderDetail detail=items.get(i);
statement.clearBindings();
statement.bindString(1, detail.getDescription);
statement.bindDouble(2, detail.getPrice);
//...
statement.execute();
}
db.setTransactionSuccessful();
wasSuccessful = true;
}
} finally {
db.endTransaction();
this.closeDB();
}
return wasSuccessful;
}
的问题是,现在我想用一个ContentProvider
,我不知道如何处理这种情况下做的,其中约两个数据或多个表必须传递给一个CRUD操作,知道insert
操作只接受两个参数:
@Override
public Uri insert(Uri uri, ContentValues values) {
}
,当你有一个交易插入关系数据,你在ContentProvider的做些什么N +
在此先感谢。
对不起,我没有把这个标记为答案,但因为我不得不回到IOS项目,然后其他的东西出现了,直到昨天我才能回到我的android项目并确认你的解决方案是正确的答案。 – eddy 2015-04-10 12:24:53
没问题。感谢您记住这一点,并在经过这么长时间后提升我!这应该是值得的SO奖励自己。 – 2015-04-10 13:59:56
当你把我放在正确的轨道上,你真的值得。再次非常感谢你,对不起,如果花了我很多时间来标记这个答案,但因为我在空闲时间学习Android,所以我不得不推迟这个个人项目一段时间。最后如果有人觉得有用,这里是一个例子,说明如何在Content Provider中实现'applyBatch'方法https://github.com/google/iosched/blob/master/android/src/main/java/com /google/samples/apps/iosched/provider/ScheduleProvider.java – eddy 2015-04-10 16:09:43