2010-07-11 8 views
21

मैं सोच रहा था कि क्या एक ही प्रदाता में android.content.ContentResolver.applyBatch() विधि का उपयोग कर सामग्री प्रदाता को मास्टर और विस्तार रिकॉर्ड सहेजना संभव है, जहां प्रदाता पैरामीटर में बाद में ContentProviderOperation आइटम पिछले आइटम के परिणाम पर निर्भर करता है । ContentResolver.applyBatch() का उपयोग कर मास्टर-विवरण?

समस्या मैं आ रही है कि वास्तविक उरी समय में ज्ञात नहीं है कि ContentProviderOperation.newInsert (उरी) विधि कहा जाता है और उरी अपरिवर्तनीय है।

क्या मैं के साथ नीचे दिखाया गया है ऊपर आ गए हैं:

मास्टर उरी: सामग्री: //com.foobar.masterdetail/master
विस्तार से उरी: सामग्री: //com.foobar। masterdetail/मास्टर/#/विस्तार

ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(); 
operations.add(ContentProviderOperation.newInsert(intent.getData()) 
    .withValue(Master.NAME, "") 
    .withValue(Master.VALUE, "") 
    .build()); 
operations.add(ContentProviderOperation.newInsert(intent.getData() 
     .buildUpon() 
     .appendPath("#") /* ACTUAL VALUE NOT KNOWN UNTIL MASTER ROW IS SAVED */ 
     .appendPath("detail") 
     .build()) 
    .withValue(Detail.MASTER_ID, /* WHAT GOES HERE? */) 
    .withValue(Detail.NAME, "") 
    .withValue(Detail.VALUE, "") 
    .build()); 
ContentProviderResult[] results = this.getContentResolver().applyBatch(MasterDetail.AUTHORITY, operations); 
for (ContentProviderResult result : results) { 
    Uri test = result.uri; 
} 

मेरी सामग्री प्रदाता में, मैं आदेश operati रैप करने के लिए में applyBatch() विधि अधिभावी कर रहा हूँ एक लेनदेन में।

क्या यह संभव है या ऐसा करने का एक बेहतर तरीका है?

धन्यवाद।

+0

कृपया, क्या आपको लगता है कि आप मास्टर-विवरण रिकॉर्ड डालने के लिए अपना कोड साझा कर सकते हैं। मैं लगभग एक सप्ताह तक इस बारे में कुछ जानकारी खोजने की कोशिश कर रहा हूं। – eddy

उत्तर

17

ऑपरेशन सरणी में किसी आइटम से उत्पादित प्रत्येक परिणाम को इसकी अनुक्रमणिका द्वारा सरणी में पहचाना जाता है। बाद के ऑपरेशन उन परिणामों को संदर्भित कर सकते हैं withalueBackReference() विधि।

.withValue(Detail.MASTER_ID, /* WHAT GOES HERE? */) 

.withValueBackReference(Detail.MASTER_ID, 0) 

इस प्रयोग का एक पूरा उदाहरण sample ContactManager में पाया जा सकता हो जाता है। 0 ContentProviderOperation की अनुक्रमणिका है जिससे मूल्य प्राप्त किया जाता है।

+0

मैं नमूना परियोजनाओं को कैसे डाउनलोड कर सकता हूं? मुझे कोई डाउनलोड लिंक नहीं दिख रहा है – eddy

+0

http://stackoverflow.com/questions/4655291/semantics-of-withvaluebackreference – phreed

संबंधित मुद्दे