我想在自定義contentprovider上使用overrided applyBatch()方法。我知道它通過了ContentProviderOperations的ArrayList。在我的情況下,他們都更新ContentProviderOperations。在我的提供者中,我想更新一個簡單的數組中的數據(現在是我的替身數據庫),它首先插入到ContentProviderOperation.Builder中。Android ContentProvider和ContentProviderOperation.newUpdate()
重要的代碼位至今:
當我建立我的ContentProviderOperations從通道陣列我的數據:
public void setNumValues(Uri mindex, int[] channels)
{//setting type to 0 first for everything
//first is RPM, then Speed
ContentValues[] values = new ContentValues[channels.length];
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
for (int i = 0; i< channels.length-1; i++){
values[i].put(NumberProvider.numColumnNames[NumberProvider.VALUE], channels[i]);
values[i].put(NumberProvider.numColumnNames[NumberProvider.TYPE], 0);
operations.add(ContentProviderOperation.newUpdate(NumberProvider.NUM_PROVIDER_MODEL_URI).withValues(values[i]).build());
}
//values.put(NumberProvider.numColumnNames[NumberProvider.VALUE], value);
//mContext.getContentResolver().update(mindex, values, null,null);
try {
mContext.getContentResolver().applyBatch(NumberProvider.NUM_AUTHORITY,operations);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
然後我覆蓋的方法在我的供應商:
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
int tableindex = (int) (ContentUris.parseId(uri));
if ((tableindex > 0) && (tableindex <= numProviderDataList.size())) {
numProviderDataType Data = numProviderDataList.get(tableindex - 1);
Data.value = values.getAsInteger(numColumnNames[VALUE]);
// Log.e("Provider1", Float.toString(Data.mValue1));
// Log.e("Provider2", Float.toString(Data.mValue2));
}
getContext().getContentResolver().notifyChange(uri, null);
return 1;
}
@Override
public ContentProviderResult[] applyBatch(
ArrayList<ContentProviderOperation> ops)
throws OperationApplicationException {
// TODO Auto-generated method stub
ContentProviderResult[] result;
try{
result = super.applyBatch(ops); //Does this call my provider's update() method?
} catch(OperationApplicationException e){
throw e;
}
//let observer know there's been a change at the URI
getContext().getContentResolver().notifyChange(NUM_PROVIDER_MODEL_URI, null);
return result;
然後,我如何從操作ArrayList中獲取數據,以便將其放入存儲結構中?在這種情況下,它是一個簡單的數組。被覆蓋的applyBatch()中的super.applyBatch()是否意識到它們都是更新ContentProviderOperations,然後在我的操作ArrayList中調用我的提供者的ContentProviderOperation的覆蓋更新方法?我找不到任何使用自定義提供程序的示例。