2015-12-03 6 views
6

Ich habe Abstürze auf einigen Geräten, wenn ich SQLiteAssetHelper in meiner App verwende, vor allem auf OnePlus-Geräten. Jetzt lese ich here, dass es mit dem Verzeichnis zu tun hat, in dem die Datenbank gespeichert ist.SQLiteAssetHelper - Probleme auf bestimmten Telefonen, z. OnePlus

Jetzt eine Abhilfe zu finden Ich versuche, könnte das Beste, was ich komme mit zur Zeit ein Konstruktor wie diese

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

Ist dies der richtige Weg, es zu tun ist, oder gibt es andere Probleme mit diesem Ansatz ?

EDIT

Die Ausnahme ist

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 

Sorry, verbunden ich die falsche SO-Frage: this is the correct one. Dort heißt es: "OnePlus kann die Datenbank nach /data/data/package-name/databases/filename.db kopieren, aber es erlaubt nicht, auf diese Daten zuzugreifen, und ich habe keine Ahnung, was das bedeutet."

+0

Hey do you Datenbank von einem Ort an einen anderen Ort kopieren? –

+0

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

+0

Welche spezifischen Modelle geben Ihnen dieses Problem? Ich könnte versuchen, mir eines anzueignen, um das Problem zu reproduzieren. – CommonsWare

Antwort

2

Mit dem SQLiteAssetHelper-Konstruktor können Sie Ihren eigenen Datenbankzielpfad angeben (der Ordner muss beschreibbar sein). Wenn Sie keine angeben, wird standardmäßig eine verwendet. Sehen Sie diesen Auszug aus dem Github Repo:

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

Ja, ich weiß, deshalb benutze ich jetzt den Konstruktor, den Sie in meiner Frage sehen. Ich bin mir nur nicht sicher, ob das richtig ist, besonders das Verzeichnis, das ich verwende. – swalkner

+0

Darf ich Sie nach der Ausnahme fragen, die Sie erhalten, wenn Sie "context.getApplicationInfo(). DataDir" verwenden? Ich habe es nicht mit getFilesDir versucht, also spekuliere ich hier. Es kann sein, dass Ihre App nicht mehr funktioniert, wenn Sie sie zum Beispiel auf die SD-Karte verschieben. – narko

+0

siehe meine Edit – 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

Wenn du Paste kopieren willst, antworte zumindest voll und ganz die ursprünglichen Benutzer-Credits: - | S.: Die ursprüngliche Antwort [link] (http://stackoverflow.com/a/34260857/3125800) – Build3r

Verwandte Themen