2015-12-03 5 views
6

मैं जब मेरे एप्लिकेशन में SQLiteAssetHelper का उपयोग कर, सभी के अधिकांश OnePlus उपकरणों पर कुछ उपकरणों पर क्रैश का सामना कर रहा हूँ। अब मैं here पढ़ता हूं कि इसे डेटाबेस को संग्रहीत निर्देशिका के साथ करना है।SQLiteAssetHelper - विशिष्ट फोन पर समस्याएं, उदा। OnePlus

अब मैं एक समाधान खोजने की कोशिश कर रहा हूँ, सबसे अच्छा मैं ऊपर आ सकता है के साथ वर्तमान में इस

public MySubclass(Context context) { 
    super(context, databaseName, context.getFilesDir() + "/databases", null, databaseVersion); 

की तरह एक निर्माता है इस यह करने के लिए सही तरीका है या वहाँ इस दृष्टिकोण के साथ अन्य समस्याएं हैं ?

संपादित

अपवाद

Fatal Exception: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version x to y: /data/data/my.package.id/databases/database.db 

क्षमा है, मैं गलत SO-प्रश्न जुड़ा हुआ: this is the correct one। वहां यह कहता है 'वनप्लस डेटाबेस को /data/data/package-name/databases/filename.db पर कॉपी करने में सक्षम है लेकिन यह उस डेटा तक पहुंचने की अनुमति नहीं देता है और मुझे इसके बारे में कोई जानकारी नहीं है।'

+0

अरे आप एक अन्य जगह पर एक स्थान से डेटाबेस नकल करना चाहते हैं? –

+0

http://stackoverflow.com/a/34260857/3513479 –

+0

कौन सा विशिष्ट मॉडल आपको यह समस्या दे रहे हैं? मैं इस मुद्दे को पुन: पेश करने के लिए अपने हाथों को पाने की कोशिश कर सकता हूं। – CommonsWare

उत्तर

2

SQLiteAssetHelper निर्माता आप अपने खुद के डेटाबेस गंतव्य पथ (फ़ोल्डर लिखने योग्य होने की जरूरत है) निर्दिष्ट करने के लिए अनुमति देता है। यदि आप किसी को निर्दिष्ट नहीं करते हैं तो यह डिफ़ॉल्ट रूप से एक का उपयोग कर रहा है। Github रेपो से इस अंश देखें:

if (storageDirectory != null) { 
     mDatabasePath = storageDirectory; 
    } else { 
     mDatabasePath = context.getApplicationInfo().dataDir + "/databases"; 
    } 
+0

हाँ, मुझे पता है, यही कारण है कि अब मैं अपने प्रश्न में देखे गए निर्माता का उपयोग कर रहा हूं। मुझे यकीन नहीं है कि यह सही है, खासकर जिस निर्देशिका का मैं उपयोग कर रहा हूं। – swalkner

+0

क्या मैं आपको "context.getApplicationInfo()। DataDir" का उपयोग करते समय प्राप्त अपवाद के लिए पूछ सकता हूं? मैंने getFilesDir के साथ खुद को कोशिश नहीं की, इसलिए मैं यहां अनुमान लगाता हूं। ऐसा हो सकता है कि यदि आप इसे एसडीकार्ड में ले जाते हैं तो उदाहरण के लिए आपका ऐप काम करना बंद कर देता है। – narko

+0

कृपया मेरा संपादन देखें – swalkner

2
Hey you can copy database from one to another from below mentioned code. 

public class MySQLiteHelper extends SQLiteOpenHelper implements DBConstants { 

private static MySQLiteHelper mInstance = null; 
private SQLiteDatabase myDataBase; 
private static String DB_PATH = ""; 

public MySQLiteHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    try { 
     if (checkDataBase()) 
      openDataBase(); 
     else 
      myDataBase = this.getReadableDatabase(); 
    } catch (Exception e) { 
    } 
} 

public static MySQLiteHelper instance(Context context) { 

    File outFile = context.getDatabasePath(DATABASE_NAME); 
    DB_PATH = outFile.getPath(); 

    if (mInstance == null) { 
     mInstance = new MySQLiteHelper(context); 
    } 

    return mInstance; 
} 
+0

काम नहीं करता है जिसे आप कॉपी करना पेस्ट दूसरों का जवाब चाहते हैं तो कम से कम यह पूरी तरह से करते हैं और दे मूल उपयोगकर्ता क्रेडिट: - | पीएस: मूल उत्तर [लिंक] (http://stackoverflow.com/a/34260857/3125800) – Build3r

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