2011-03-10 15 views
5

मेरे पास मेरे एप्लिकेशन में एक स्क्लाइट डेटाबेस है। मेरा आवेदन इसे खाली डेटाबेस के रूप में नहीं भेजना चाहिए, लेकिन उपयोगकर्ता को पहली बार एप्लिकेशन का उपयोग करने से पहले कुछ रिकॉर्ड बनाए जाने की आवश्यकता है। बेशक मैं कई सम्मिलित बयान प्राप्त कर सकता हूं, लेकिन यह बहुत अजीब लगता है। मैंने http://vineetyadav.com/tutorials/11-adding-prefilled-sqlite-database-to-android-app.html जैसी कुछ चीज़ों के बारे में सोचा जो मूल रूप से काम करता है, लेकिन इसका मतलब है कि मेरे मैन्युअल रूप से बनाए गए डीबी को एंड्रॉइड_मैटडाटा जैसी सभी आंतरिक सारणी की भी आवश्यकता है। तो मुझे या तो यह जानने की जरूरत है कि आंतरिक टेबल मौजूद हैं और उन्हें कैसे भरें। या एक पूर्व भरा डेटाबेस होने का एक और स्मार्ट तरीका। कोई सुझाव?एंड्रॉइड प्री-फिल एसक्लाइट डेटाबेस

धन्यवाद, ए

+1

आप अपने डेटाबेस कनेक्शन प्राप्त करने के लिए SQLiteOpenHelper का उपयोग क्यों नहीं करते हैं, और संसाधन से डेटा भरने के लिए इसे 'ऑनक्रेट' विधि ओवरराइड करते हैं? – user634618

उत्तर

3

आप एसडी कार्ड से एक फ्लैट फ़ाइल में प्रति पंक्ति 1 सम्मिलित कथन के साथ पढ़ सकते हैं और उस फ़ाइल के माध्यम से पुनरावृत्त कर सकते हैं।

public ArrayList<ContactItem> readInputFile(Context context, String filename) { 
    String text = null; 
    BufferedReader reader = null; 
    ArrayList<ContactItem> contact_list = new ArrayList<ContactItem>(); 
    contact_list.clear(); // Clear any existing contacts when a new file is read 
    try { 
     reader = new BufferedReader(new FileReader(filename)); 
     // Repeat until EOF 
     while (((text = reader.readLine()) != null)) { 
      if (!(text.length() > 1024)) { // If we read more than 1k per line there's a problem with the input file format 
       ContactItem c = new ContactItem(text); 
       if (c.getIsValid()) { 
        // We were able to parse a well formed phone number from the last line read 
        contact_list.add(c); 
       } 
      } 
     } 
    } catch (FileNotFoundException e) { 
     Toast.makeText(context, R.string.error_fileNotFound, 1).show(); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     Toast.makeText(context, R.string.error_ioException, 1).show(); 
     e.printStackTrace(); 
    } finally { // EOFException (or other, but EOF is handled and most likely) 
     try { 
      if (reader != null) { 
       reader.close(); 
      } 
     } catch (IOException e) { 
      Toast.makeText(context, R.string.error_generalFailure, 1).show(); 
      e.printStackTrace(); 
     } 
    } 
    return contact_list; 
} 
1

निजी तौर पर मैं सिर्फ डालने बयान किया था, लेकिन मैं केवल था 2, तो यह मेरे लिए शीर्ष पर नहीं मालूम था।

यदि आपको आंतरिक तालिकाओं को जानने की आवश्यकता है तो आप अपने एप्लिकेशन से डेटाबेस क्यों निकालें और इसे किसी भी SQLite डेटाबेस एक्सप्लोरर (मैं SQLite Database Browser का उपयोग करें) के साथ एक नज़र डालें?

android_metadata SQLite डेटाबेस ब्राउज़र में दिखाया गया है उदाहरण के लिए CREATE TABLE android_metadata(locale TEXT) द्वारा बनाया जा रहा है।

संभवतः यह सुनिश्चित करने के लिए एक कथन डालें कि यह कैसा दिखता है।

तो आप आसानी से इसे फिर से बना सकते हैं और इसे जोड़ सकते हैं?

+0

हाँ और नहीं, android_metadata ले लो, मेरे मामले में इसमें केवल मेरा लोकेल है। तो मुझे यह पता लगाने की जरूरत है कि इन उपयोगकर्ताओं के लिए इसे कैसे सेट किया जाए। मुझे लगता है कि यह संभव होगा। लेकिन यह सब कुछ अनुमान है जो उन उपकरणों पर असफल हो सकता है जिन्हें मैं परीक्षण नहीं कर सकता। एक अंतिम उपाय के रूप में ठीक है, लेकिन एक spec का पालन करें मैं पसंद करेंगे ... – AndyAndroid

+0

सवाल जोड़ें: यदि आपके पास 2 से अधिक प्रविष्टियां हैं, तो क्या आप इनरियल मानों को एक सरणी में स्टोर करेंगे और डीबी में या एक फ्लैट फ़ाइल में डाल देंगे या एक एक्सएमएल फ़ाइल में? – AndyAndroid

+0

आह ... मुझे यह नहीं पता था - क्षमा करें। दूसरे प्रश्न के अनुसार - पुhew, मेरी इच्छा है कि मुझे पता चले कि ऐसा करने का सबसे प्रभावी तरीका क्या होगा, लेकिन मैं नहीं करता हूं। मैं अभी भी एक नौसिखिया हूं - मेरा डीबी सिर्फ एक साधारण आईपी सूची था, इसलिए एक आसान कार्यान्वयन। :) मेरा आंत एक्सएमएल या फ्लैट फ़ाइल (संभवतः एक्सएमएल से धीमा है?) अच्छा अभ्यास है, लेकिन इसके लिए मेरा शब्द न लें। – Klaus

1

मैं/रेस में डेटा संग्रहीत JSON के रूप में कच्चे निर्देशिका:

यहाँ एक समान उदाहरण है, जिसमें मैं एक फ़ाइल को पढ़ने और मेरे contact_list करने के लिए एक ContactItem जोड़ने है। जब एप्लिकेशन पहली बार खोला गया था, तो मैंने एक AsyncTask का उपयोग किया, JSON फ़ाइल (GSON लाइब्रेरी का उपयोग किया) पढ़ा और इसके साथ मेरा डेटाबेस भर दिया।

मैंने इसे लगभग 1000 रिकॉर्ड के साथ आजमाया है और यह मेरे लिए काम करता है। यह अभी भी कुछ समय ले लिया - एक एमुलेटर पर लगभग 15-30 सेकंड।

यह सुनिश्चित नहीं है कि यह सबसे अच्छा तरीका है या नहीं।

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