android - SQLiteOpenHelper problem with fully qualified DB path name -


मेरे ऐप में, मैं का उपयोग करता हूं ...

  myFilesDir = new file (पर्यावरण GetExternalStorage डायरेक्टरी ()। GetAbsolutePath () + "/ एंड्रॉइड / डेटा /" + पैकेजनाम + "/ फाइल"); myFilesDir.mkdirs ();   

यह ठीक है और परिणामी पथ है ...

  /mnt/sdcard/Android/data/com.mycompany.myApp/files   

मैं एक SQLite DB जो मैं एसडी कार्ड पर संग्रहीत करना चाहते हैं की जरूरत है तो मैं SQLiteOpenHelper का विस्तार इस प्रकार है ...

  सार्वजनिक वर्ग myDbHelper फैली SQLiteOpenHelper {सार्वजनिक myDbHelper (संदर्भ संदर्भ, स्ट्रिंग नाम, CursorFactory कारखाने, पूर्णांक संस्करण) {// नोट मैं 'नाम' सुपर (संदर्भ, myFilesDir + "/" + नाम, कारखाने, संस्करण) के लिए अपनी फ़ाइलें निर्देशिका का पूरा पथ उपसर्ग; } @Override सार्वजनिक शून्य OnCreate (SQLiteDatabase डाटाबेस) {// टेबल बना सकते हैं और डिफ़ॉल्ट डेटा के साथ पॉप्युलेट ...}}   

अब तक तो अच्छा - पहली बार मैं फोन getReadableDatabase () या getWriteableDatabase () खाली डीबी एसडी कार्ड पर बनाए जाने और onCreate () यह भरता है।

तो यहाँ है समस्या - ऐप बीटा परीक्षण में शायद 5 या 6 लोग हैं और, मेरे जैसे, वे एंड्रॉइड v2.2 चला रहे हैं और सब कुछ ठीक काम करता है हालांकि मेरे पास एक टेस्टर है, हालांकि, v2.1 चल रहा है और जब myDbHelper पहले उपयोग पर डीबी बनाने की कोशिश करता है, तो यह निम्नलिखित के साथ क्रैश करता है ...

  ई / AndroidRuntime (3941): java.lang.IllegalArgumentException: की वजह से फ़ाइल /nand/Android/data/com.mycompany.myApp/files/myApp-DB.db3 एक पथ विभाजक ई / AndroidRuntime (3941) शामिल हैं: android.app पर । एप्लिकेशन कन्टेक्स। मेकफ़िलनैम (एप्लिकेशनकॉन्टेक्स। Java1445) ई / एंड्रॉइड रेंटाइम (3 9 41): एंड्रॉइड.एप.एप्लिकेशनकॉन्टेक्स। ओपनऑनरेकेटडेटाबेस (एप्लिकेशनकॉन्टेक्स्ट.जावाक्यू 7373) ई / एंड्रॉइडरेंटाइम (3 9 41): एंड्रॉइड कंटेंट.कॉन्टेक्सवापर। ओपेनओर्रेकेटडेटाबेस (संदर्भवापर जावा: 193) ई / AndroidRuntime (3941): पर android.database.sqlite.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:98) ई / AndroidRuntime (3941): android.database.sqlite.SQLiteOpenHelper.getReadableDatabase पर (SQLiteOpenHelper.java : 158)   

फाइल निर्देशिका के लिए पथ एक अजीब ("/ नंद") है क्योंकि यह आंतरिक मेमोरी है, हालांकि फोन की खुद की इंटर्न नहीं है

मैं तीन संभावित उत्तरों देख सकता हूँ ...

  1. यद्यपि v2.2 पर स्वीकार्य है, डीबी नाम के लिए पूर्णतः योग्य पथ निर्दिष्ट करने की सिफारिश नहीं की जाती है और पहले के संस्करणों पर असफल हो जाएगा
  2. एसडी कार्ड भंडारण के लिए पूरी तरह योग्य पथ स्वीकार्य हैं, लेकिन "/ nand" पथ है
  3. कुछ और जो मुझे पूरी तरह से याद आ रही है

    यदि उपरोक्त सभी या सभी लागू होते हैं I '

    धन्यवाद

    < P> ऐतिहासिक रूप से, आप SQLiteOpenHelper के साथ पथ का उपयोग करने में सक्षम नहीं हैं। यह केवल साधारण फ़ाइल नाम पर काम करता है मुझे एहसास नहीं हुआ था कि उन्होंने एंड्रॉइड 2.2 में उस प्रतिबंध को आराम दिया।

    यदि आप एसडी कार्ड पर डेटाबेस का उपयोग करना चाहते हैं, और आप एंड्रॉइड 2.1 और इससे पहले का समर्थन करना चाहते हैं, तो आप SQLiteOpenHelper

    क्षमा करें!

Comments