我需要插入與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