2012-03-15 19 views
7

का उपयोग नहीं कर रहे हैं मैं एक सामग्री प्रदाता बनाने की कोशिश कर रहा हूं जो आंतरिक संग्रहण का उपयोग करता है। हालांकि, ऑनलाइन देखे जाने वाले सभी उदाहरण केवल स्क्लाइट का उपयोग करते हैं।सामग्री प्रदाता उदाहरण SQLite

क्या कोई मुझे आंतरिक भंडारण का उपयोग कर सामग्री प्रदाता बनाने का एक अच्छा ट्यूटोरियल या उदाहरण प्रदान कर सकता है?

+0

कृपया परिभाषित करें कि "आंतरिक सामग्री का उपयोग करने वाले सामग्री प्रदाता" का अर्थ क्या है, यह देखते हुए कि SQLite आमतौर पर आंतरिक संग्रहण का उपयोग करता है, फिर भी आप SQLite नहीं चाहते हैं। – CommonsWare

+0

@ कॉमन्सवेयर एंड्रॉइड डेवलपमेंट पेज के अनुसार, डेटा स्टोर करने के 5 तरीके हैं: साझा प्राथमिकताएं, आंतरिक संग्रहण, बाहरी संग्रहण, SQLite डेटाबेस, और नेटवर्क कनेक्शन। मैं चाहता हूं कि मेरा सामग्री प्रदाता आंतरिक संग्रहण विकल्प का उपयोग करे। – drum

+0

उस संदर्भ में आंतरिक संग्रहण का अर्थ है आपके एप्लिकेशन के निजी डेटा क्षेत्र में फ़ाइलों में सामान संग्रह करना। यह वास्तव में एक एपीआई नहीं है। यह देखते हुए कि SQLite डेटाबेस को आपके एप्लिकेशन के निजी डेटा क्षेत्र में फ़ाइल के रूप में संग्रहीत किया जाता है, आपको परेशान करने के लिए कुछ सुंदर विशेषज्ञ करना होगा --- SQLite का उपयोग करना आम तौर पर आसान (और तेज़) होता है। –

उत्तर

4

आप openTypedAssetFile() जैसी सामग्री प्रदाताओं के लिए फ़ाइल विधियों का उपयोग करके फ़ाइलों में डेटा स्टोर कर सकते हैं। यह एक कर्सर के बजाय एक AssetFileDescriptor (यानी, एक फ़ाइल हैंडल जो प्रक्रियाओं में मान्य है) देता है।

पूरी तरह से, प्रश्न का उत्तर देना बहुत मुश्किल है। एक सामग्री प्रदाता डेटा भंडार और ग्राहकों के बीच एक "इंटरफेस" है। दस्तावेज SQLite के अलावा अन्य भंडारों के बारे में ज्यादा नहीं कहता है क्योंकि ए) सामग्री प्रदाता मॉडल एक संबंधपरक डेटाबेस के आधार पर व्यवस्थित किया जाता है और बी) सामग्री प्रदाता के प्रत्येक कार्यान्वयन अलग होने जा रहा है।

मैं आपकी सटीक आवश्यकताओं को जानने से पहले कोई और सलाह देने में संकोच करता हूं। ऐसा हो सकता है कि आप SQLite से लाभ उठा सकें, हालांकि आप तुरंत क्यों नहीं देख सकते हैं। आप भी सही हो सकते हैं: SQLite समाधान नहीं है, लेकिन अधिक जानकारी दी गई है, मैं कुछ विचारों का प्रस्ताव दे सकता हूं।

+0

मैं देख रहा हूं कि आप क्या कह रहे हैं। साथ ही, ऐसा लगता है कि कुछ ContentProvider के फ़ंक्शन को डेटाबेस की आवश्यकता होती है। मैं क्वेरी() फ़ंक्शन को लागू करने के तरीकों को खोजने का प्रयास कर रहा हूं, लेकिन चूंकि इसे कर्सर ऑब्जेक्ट वापस करना होगा, मुझे लगता है कि SQLite इस मामले में जरूरी है। – drum

+1

[यह] ढूंढें (https://android.googlesource.com/platform/packages/providers/WebSearchProvider/+/8637dd8dc1b255052b2615430bfb4603fa8711f7/src/com/android/websearch/SuggestionProvider.java) SQLIte का उपयोग न करें। स्रोत डेटा JSONArray है। हम सीख सकते हैं कि कैसे कर्सर को सार कर्सर का विस्तार करना है। – Yeung

0

अच्छी तरह से मुझे पता है कि आप क्या करने की कोशिश कर रहे हैं शायद छवियों, फिल्मों, या आंतरिक भंडारण के साथ।

आप डेटा के बाइट स्टोर करने के लिए InternalStorage का उपयोग कर सकते हैं। आप बाइट्स है, तो आप सिर्फ कर सकते हैं:

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

यह बाहर निकलने के लिए:

File file = ... 
    OutputStream out = null; 
    try { 
    out = new BufferedOutputStream(new FileOutputStream(file)); 
    ... 
    finally { 
    if (out != null) { 
     out.close(); 
    } 
    } 

सभी स्रोतों this और this पर पाए जाते हैं। इस कारण से मैं आपकी मदद नहीं कर सकता क्योंकि मैंने कभी कोशिश नहीं की।

+0

हां पूरा करना चाहते हैं, हां, मैं पहले से ही कर चुका हूं इस पेज को देखा हालांकि, यह सामग्री प्रदाता में काम नहीं करता है। – drum

1

एंड्रॉइड एसडीके नमूने में FileProvider.java नामक एक उदाहरण है जो ContentProvider का उपयोग करता है लेकिन SQLite डेटाबेस नहीं।

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