J
Jooker86
Neues Mitglied
- 0
Hallo zusammen,
bin noch relativ neu in der Android-Programmierung und komme gerade an einem Punkt nicht weiter. Ich habe eine Datenbank mit "SqliteBrowser" erstellt und diese in den Assets-Ordner kopiert. Danach habe ich in Android Studio die Klassen nach den folgenden zwei Tutorials erstellt:
blog.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/
Die Methode createDataBase() wird bei mir nicht in der MainActivity sondern in der als nächstes geöffneten Activity aufgerufen (ich weiß nicht, ob das von Bedeutung ist). Dabei wird die Datenbank jedoch nicht erstellt bzw. kopiert. Ich erhalte stattdessen folgenden Error-Log:
Ich habe schon so ziemlich alle Foren nach diesem Fehler durchsucht und besonders auf "stackoverflow" viel dazu gefunden, aber alle dort vorgeschlagenen Lösungen halfen bei mir nichts.
Ich habe auch öfter mal etwas von SD-Karten gelesen, deshalb bin ich mir nicht ganz sicher, ob der Pfad /data/data/PACKAGE-NAME/databases/ nun auf dem Gerät oder auf der SD-Karte liegt? Eine SD-Karte ist bei mir jedenfalls nicht im Gerät und ich möchte auch nicht, dass die Datenbank dorthin kopiert wird.
Hier noch der Code von meinem DBHelper:
Wäre super, wenn mir jemand helfen könnte!
Vielen Dank!
Gruß
Tom
bin noch relativ neu in der Android-Programmierung und komme gerade an einem Punkt nicht weiter. Ich habe eine Datenbank mit "SqliteBrowser" erstellt und diese in den Assets-Ordner kopiert. Danach habe ich in Android Studio die Klassen nach den folgenden zwei Tutorials erstellt:
blog.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/
Die Methode createDataBase() wird bei mir nicht in der MainActivity sondern in der als nächstes geöffneten Activity aufgerufen (ich weiß nicht, ob das von Bedeutung ist). Dabei wird die Datenbank jedoch nicht erstellt bzw. kopiert. Ich erhalte stattdessen folgenden Error-Log:
Code:
03-30 21:46:29.323 28881-28881/? W/System.err: java.io.FileNotFoundException: database.db
03-30 21:46:29.323 28881-28881/? W/System.err: at android.content.res.AssetManager.openAsset(Native Method)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.content.res.AssetManager.open(AssetManager.java:324)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.content.res.AssetManager.open(AssetManager.java:298)
03-30 21:46:29.323 28881-28881/? W/System.err: at MYPACKAGENAME.database.DBHelper.copyDataBase(DBHelper.java:47)
03-30 21:46:29.323 28881-28881/? W/System.err: at MYPACKAGENAME.database.DBHelper.onCreate(DBHelper.java:78)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
03-30 21:46:29.323 28881-28881/? W/System.err: at MYPACKAGENAME.database.DBHelper.createDataBase(DBHelper.java:31)
03-30 21:46:29.323 28881-28881/? W/System.err: at MYPACKAGENAME.activities.MasterMainmenue.onCreate(MasterMainmenue.java:98)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.app.Activity.performCreate(Activity.java:6289)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2655)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.app.ActivityThread.access$900(ActivityThread.java:177)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.os.Looper.loop(Looper.java:145)
03-30 21:46:29.323 28881-28881/? W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5951)
03-30 21:46:29.333 28881-28881/? W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-30 21:46:29.333 28881-28881/? W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
03-30 21:46:29.333 28881-28881/? W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
03-30 21:46:29.333 28881-28881/? W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
Ich habe schon so ziemlich alle Foren nach diesem Fehler durchsucht und besonders auf "stackoverflow" viel dazu gefunden, aber alle dort vorgeschlagenen Lösungen halfen bei mir nichts.
Ich habe auch öfter mal etwas von SD-Karten gelesen, deshalb bin ich mir nicht ganz sicher, ob der Pfad /data/data/PACKAGE-NAME/databases/ nun auf dem Gerät oder auf der SD-Karte liegt? Eine SD-Karte ist bei mir jedenfalls nicht im Gerät und ich möchte auch nicht, dass die Datenbank dorthin kopiert wird.
Hier noch der Code von meinem DBHelper:
Code:
public class DBHelper extends SQLiteOpenHelper{
private static String DB_PATH = "/data/data/MYPACKAGENAME/databases/";
private static String DB_NAME = "database.db";
private SQLiteDatabase myDataBase;
private final Context myContext;
public DBHelper(Context context){
super(context, DB_NAME, null, 1);
this.myContext = context;
}
public void createDataBase(){
if(checkDataBase()){
}else{
this.getReadableDatabase();
copyDataBase();
}
}
private boolean checkDataBase(){
File f = new File(DB_PATH + DB_NAME);
if(f.exists()){
return true;
}else{
return false;
}
}
private void copyDataBase(){
try{
InputStream myInput = myContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte [] buffer = new byte[1024];
int length;
while((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}catch (IOException e){
e.printStackTrace();
}
}
public void openDataBase(){
myDataBase = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, SQLiteDatabase.OPEN_READONLY);
}
public void closeDataBase(){
if(myDataBase != null){
myDataBase.close();
}
}
@override
public void onCreate(SQLiteDatabase db) {
}
@override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
Wäre super, wenn mir jemand helfen könnte!
Vielen Dank!
Gruß
Tom
Zuletzt bearbeitet von einem Moderator:
Bearbeitet von:
u.k-f
- Grund: Code in Code-Tags gepackt