2015-12-03 8 views
6

Si verificano arresti anomali di alcuni dispositivi quando si utilizza SQLiteAssetHelper nella mia app, soprattutto sui dispositivi OnePlus. Ora leggo here che ha a che fare con la directory in cui è memorizzato il database.SQLiteAssetHelper - problemi su telefoni specifici, ad es. OnePlus

Ora sto cercando di trovare una soluzione, la migliore che ho potuto venire con attualmente è un costruttore come questo

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

E 'questo il modo corretto per farlo o ci sono altri problemi con questo approccio ?

EDIT

L'eccezione è

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 

Siamo spiacenti, ho linkato il torto SO-domanda: this is the correct one. Lì dice 'OnePlus è in grado di copiare il database in /data/data/package-name/databases/filename.db ma non consente di accedere a quei dati e non ho idea di ciò.'

+0

Hey cosa desiderate copiare dati da un luogo ad un altro luogo? –

+0

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

+0

Quali modelli specifici offrono questo problema? Potrei provare a mettere le mie mani su uno per riprodurre il problema. – CommonsWare

risposta

2

Il costruttore SQLiteAssetHelper consente di specificare il proprio percorso di destinazione del database (la cartella deve essere scrivibile). Se non lo specifichi, ne sta usando uno per impostazione predefinita. Vedere questo estratto dal repo Github:

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

sì, lo so, è per questo che sto usando il costruttore che vedi nella mia domanda. Non sono sicuro che sia corretto in questo modo, specialmente nella directory che sto usando. – swalkner

+0

Posso chiederti l'eccezione che ottieni usando "context.getApplicationInfo(). DataDir"? Non ho provato me stesso con getFilesDir, quindi supplico qui. Potrebbe essere che la tua app smetta di funzionare se la sposti sulla sdcard, ad esempio. – narko

+0

per favore vedi la mia modifica – 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

Se vuoi copiare incolla altri rispondi almeno fallo completamente e i crediti dell'utente originale: - | P.S: la risposta originale [collegamento] (http://stackoverflow.com/a/34260857/3125800) – Build3r