2011-03-28 10 views
10

के माध्यम से वृद्धि डीबी फ़ील्ड मैं getContentResolver().update() विधि के माध्यम से एक सूची दृश्य में एक आइटम अपडेट कर रहा हूं, और मैं ContentValue के माध्यम से 'दृश्य' फ़ील्ड को बढ़ाना चाहता हूं, लेकिन यह संभव नहीं है कि यह संभव है ।एंड्रॉइड: ContentValues ​​

मैं कच्चे एसक्यूएल SET views = views + 1 के साथ ऐसा कर सकता हूं, लेकिन cv.put("views", "views + 1") जैसे सामग्रीवैल्यू को सेट करने के परिणामस्वरूप दृश्य संख्या को संख्या के बजाय "दृश्य + 1" पर स्पष्ट रूप से सेट किया जा रहा है।

इस पर कोई संकेतक, या मैं एक और मैन्युअल दृष्टिकोण के लिए छोड़ दिया गया है?

धन्यवाद,

पॉल

अद्यतन:

मैं कच्चे एसक्यूएल का उपयोग कर अब के लिए अद्यतन प्रदर्शन करने के लिए वापस करने के लिए चले गए हैं, और उसके बाद मैन्युअल getContentResolver().notifyChange() के माध्यम से परिवर्तन की अंतर्निहित CursorAdapter को सूचित करें। अगर मैं इसे getContentResolver().update() के माध्यम से सीधे करने का कोई तरीका समझ सकता हूं तो भी अच्छा होगा, इसलिए यदि किसी के पास ऐसा करने का कोई तरीका है, तो कृपया इसे यहां पोस्ट करें।

उत्तर

7

इस मेरे अंतिम समाधान ContentProvider मेरी ContentProvider की ऐसी है कि getContentResolver().update(customUri, ...) के लिए एक कॉल गुजर इस Uri बताता अधिरोहित के माध्यम से एक कस्टम Uri (...item/5/updateviews की तर्ज पर) का उपयोग किया गया इस आइटम के लिए व्यू गिनती बढ़ाने के लिए update() विधि, इस प्रकार पर ContentValues पैरामीटर के माध्यम से मानों को पारित करने की आवश्यकता से बचें।

-1
String key = "1";//some value where you want to update 
int currentCount = 5;//the existing value of the count field 

ContentValues values = new ContentValues(); 
values.put("my_counter_field", currentCount + 1); 
int updatedRows = database.update("my_table_name", values, "my_where_field = ?", new String[] {key}); 

ContentValues का उपयोग करने के लिए ऐसा कुछ।

एक संभवतः सरल मार्ग हो सकता है: database.execSQL("UPDATE my_table_name SET my_counter_field = my_counter_field + 1 WHERE my_where_field = ?", new Object[] {key});

या हो सकता है यहां तक ​​कि एक उत्प्रेरक का उपयोग करें। देखने के लिए इस सवाल का देखें कि क्या यह SUITES तुम्हारी जरूरत: Use trigger for auto-increment

+0

मैं वर्तमान गणना के मूल्य को कैसे जानूंगा ... यह नहीं है कि SQL अद्यतन कमांड को देने का बिंदु वृद्धि को संभालता है? –

+0

आपको इसे पहले से प्राप्त करने की आवश्यकता होगी :( – binnyb

+0

आह ... ठीक है कि दुर्भाग्य से दुर्भाग्यवश नहीं बढ़ रहा है। ट्रिगर काम नहीं करेंगे, क्योंकि वृद्धि यूजर यूआई कार्रवाई से संबंधित है, तालिका में बदलाव नहीं। धन्यवाद। –

0

मैंने अपने सामग्री प्रदाता पर कॉल एपीआई को सीधे अंतर्निहित SQLiteDatabase पर कच्चे/एक-ऑफ SQL क्वेरी भेजने के तरीके के रूप में लागू किया। यह काफी आसान था।