2013-01-15 10 views
6

मेरा एप्लिकेशन रिमोट आरईएसटी एपीआई का उपभोग करता है और स्थानीय डीबी को हरीदाओ के साथ पॉप्युलेट करता है।एकाधिक लेन-देन टीएक्स संचालन को एक लेनदेन में कैसे जोड़ना है?

@Override 
protected Void doInBackground(Void... params) { 
    insert100RowsIntheFirstTable(); 
    insert100RowsIntheSecondTable(); 
} 

प्रत्येक डालने-विधि मैं insertOrReplaceInTx, जो मैं प्रदर्शन लाभ के लिए मुख्य रूप से उपयोग किया है के अंदर: मैं AsyncTask वर्ग के साथ एक सेवा है।

यदि मुझे कोई भी डेटा डेटा पुनर्प्राप्त करने में विफल रहता है तो मुझे परिणामों को त्यागना होगा। यह एक ही लेनदेन के माध्यम से किया जाना चाहिए।

मुझे आश्चर्य है कि mDaoSession.callInTx(callable) के साथ मेरी डालने-विधि कॉल को घेरने का अधिकार है, जबकि विधियों के अंदर insertOrReplaceInTx है। क्या मैं सही हू?

इसके अतिरिक्त, अगर अपवाद उठाया जाता है तो मैं लेनदेन को कैसे छोड़ूं - क्या यह ग्रीनडाओ के माध्यम से स्वचालित रूप से किया जाता है?

उत्तर

9

हाँ callInTx का उपयोग करें। यदि आपका कोड (एक अपवाद फेंक नहीं तो आप भी runInTx विचार कर सकते हैं कर सकते हैं Android के SQLite एपीआई उन "नेस्टेड" लेन-देन का ख्याल रखता है।

सब के बाद, callInTx बस सुविधा अगर की कुछ पंक्तियाँ है यदि आप स्रोत कोड को देखो:

public <V> V callInTx(Callable<V> callable) throws Exception { 
    db.beginTransaction(); 
    try { 
     V result = callable.call(); 
     db.setTransactionSuccessful(); 
     return result; 
    } finally { 
     db.endTransaction(); 
    } 
} 
+0

यह काम किया है - अच्छा – midnight

+1

पहले insertInTx सफल होता है और दूसरा एक विफल रहता है, वस्तुओं का पहला सेट सत्र कैश में नहीं रहेगी भले ही डीबी वापस लुढ़का हैं! सौदा? – Monstieur