8

मैं बैच को किसी तालिका में कुछ आइटम हटाने की कोशिश कर रहा हूं। बहुत सारे बाँध तर्कों:बैच एंड्रॉइड में सामग्री प्रदाता के साथ आइटम हटाएं

String ids = { "1", "2", "3" }; 

    mContentResolver.delete(uri, MyTables._ID + "=?", ids); 

हालांकि मैं इस निम्न त्रुटि

java.lang.IllegalArgumentException जा रहे हैं। 3 तर्क प्रदान किए गए थे लेकिन कथन को 1 तर्क की आवश्यकता है।

उत्तर

9

त्रुटि तब होती है क्योंकि आपके पास अपने तर्क में एक प्लेसहोल्डर (?) है, जबकि आप तीन तर्क पार करते हैं। आपको क्या करना चाहिए:

String ids = { "1", "2", "3" }; 

mContentResolver.delete(uri, MyTables._ID + "=? OR " + MyTables._ID + "=? OR " + MyTables._ID + "=?", ids); 

अगर SQLite में खंड का समर्थन करता है मैं नहीं जानता, इसलिए यदि आप भी कर सकता है:

String ids = { "1, 2, 3" }; 

mContentResolver.delete(uri, MyTables._ID + " IN (?)", ids); 
+0

धन्यवाद जनवरी मुझे लगता है मैं की कैसे selectionArgs काम एक मौलिक गलतफहमी थी। मेरे आईडी आकार में परिवर्तनीय हो सकते हैं। तो आपका दूसरा समाधान अधिक आकर्षक लग रहा है। हालांकि, मुझे डर है कि ऐसा काम नहीं लगता है। मुझे लगता है कि मैं कहां से अपना आकार और लूप जांच सकता हूं कि यह कहां है, लेकिन यह अच्छा प्रतीत नहीं होता है :( –

19

आप एक लेन-देन बैच विलोपन/प्रविष्टि/अपडेट करने के लिए उपयोग कर सकते हैं ContentProviderOperation । यह बहुत अच्छा है कि आपको तारों को संयोजित करने की आवश्यकता नहीं है। यह भी बहुत कुशल होना चाहिए। हटाए जाने के लिए:

ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(); 
    ContentProviderOperation operation; 

    for (Item item : items) { 

     operation = ContentProviderOperation 
       .newDelete(ItemsColumns.CONTENT_URI) 
       .withSelection(ItemsColumns.UID + " = ?", new String[]{item.getUid()}) 
       .build(); 

     operations.add(operation); 
    } 

    try { 
     contentResolver.applyBatch(Contract.AUTHORITY, operations); 
    } catch (RemoteException e) { 

    } catch (OperationApplicationException e) { 

    } 
+0

सही है, मेरे पास यह सवाल है कि 'बल्कइन्टर' तेज है कि 'लागू करें' – Anuj

+0

एसएमएस ऑपरेशन प्राधिकरण के लिए गीत संचालन के लिए '" एसएमएस "' –

+0

है, प्राधिकरण आईडी 'MediaStore.AUTHORITY' –

0
String sqlCommand = String.format("DELETE FROM %s WHERE %s IN (%s);", TABLE_NAME, KEY_ID, 1,2,3); 

db.execSQL(sqlCommand); 
संबंधित मुद्दे