मेरे पास एक सामग्री प्रदाता है जो एंड्रॉइड अनुप्रयोगों के मेरे सेट के लिए कस्टम है, और उन चीज़ों में से एक जो इसे बेनकाब करने की आवश्यकता है, एक छोटी (20-30 कीबी) बाइट सरणी है। इन धब्बे का यूआरआई लगता है:एक सामग्री प्रदाता के माध्यम से बाइनरी ब्लॉब पास करना
content://my.authority/blob/#
जहां #
पंक्ति संख्या है; परिणामी कर्सर मानक _id
कॉलम और डेटा कॉलम है। मैं प्रदाता के query()
विधि में एक MatrixCursor
उपयोग कर रहा हूँ: डेटा लेने वाली
byte[] byteData = getMyByteData();
MatrixCursor mc = new MatrixCursor(COLUMNS);
mc.addRow(new Object[] { id, byteData });
बाद में, आवेदन में, मैं करता हूँ:
Cursor c = managedQuery(uri, null, null, null, null);
c.moveToFirst();
byte[] data = c.getBlob(c.getColumnIndexOrThrow("data"));
हालांकि, डेटा अपने मूल बाइट की सामग्री को शामिल नहीं करता सरणी; बल्कि, इसमें [[email protected]
जैसे कुछ शामिल हैं, जो सामग्री की तुलना में सरणी के पते की तरह दिखता है। मैंने java.sql.Blob
के कार्यान्वयन में बाइट सरणी को लपेटने की कोशिश की, यह पता लगाया जा सकता है कि यह सामग्री प्रदाता उपप्रणाली को SQLite के साथ उपयोग करने में आसान माना गया था, लेकिन इससे मदद नहीं मिली।
क्या किसी ने इसे काम करने के लिए प्राप्त किया है? यदि डेटा फ़ाइल सिस्टम में था, तो ContentProvider
में विधियां हैं जिनका उपयोग मैं क्लाइंट को एक marshalled InputStream
प्रदान करने के लिए उपयोग कर सकता हूं, लेकिन डेटा जो मैं सामग्री प्रदाता के एपीके में संसाधन के रूप में वापस भेजने की कोशिश कर रहा हूं।
बीटीडब्लू मैं यह मानता हूं कि मैं काफी पुराने संस्करण (एंड्रॉइड -3) को लक्षित कर रहा हूं। – user308405
मैं समझता हूं कि आपने इस मुद्दे को हल किया है। किसी भी मौके पर आप इसे बाकी के साथ साझा करते हैं? –