Meine App SQLiteAssetHelper
verwendet mit vorinstallierten database.but zu arbeiten, wenn ich mit Datenbank, die die App Kraft closes.This arbeiten will, ist die logcat:SQLiteAssetHelper kippt Datenbank lesen oder schreiben
04-15 16:40:48.924 10976-10976/max.mzf.com.max E/SQLiteAssetHelper﹕ Couldn't open myDBName.db for writing (will try read-only):
com.readystatesoftware.sqliteasset.SQLiteAssetException: Missing databases/myDBName.db.zip file in assets or target folder not writable
at android.content.res.AssetManager.openAsset(Native Method)
at android.content.res.AssetManager.open(AssetManager.java:299)
at android.content.res.AssetManager.open(AssetManager.java:273)
at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.copyDatabaseFromAssets(SQLiteAssetHelper.java:376)
at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.createOrOpenDatabase(SQLiteAssetHelper.java:355)
at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getWritableDatabase(SQLiteAssetHelper.java:178)
at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getReadableDatabase(SQLiteAssetHelper.java:257)
at max.mzf.com.max.MyDatabase.getCardCount(MyDatabase.java:158)
at max.mzf.com.max.Compose.onCreate(Compose.java:65)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2466)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2519)
at android.app.ActivityThread.access$2200(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1870)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4370)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
04-15 16:40:48.934 10976-10976/max.mzf.com.max E/AndroidRuntime﹕ java.lang.RuntimeException: Unable to start activity ComponentInfo{max.mzf.com.max/max.mzf.com.max.Compose}: android.database.sqlite.SQLiteException: unable to open database file
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2503)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2519)
at android.app.ActivityThread.access$2200(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1870)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4370)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: unable to open database file
at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1698)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:739)
at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getReadableDatabase(SQLiteAssetHelper.java:267)
at max.mzf.com.max.MyDatabase.getCardCount(MyDatabase.java:158)
at max.mzf.com.max.Compose.onCreate(Compose.java:65)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2466)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2519)
at android.app.ActivityThread.access$2200(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1870)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4370)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
und dies ist SQLiteAssetHelper
Klasse:
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.widget.Toast;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
public class MyDatabase extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "myDBName.db";
private static final int DATABASE_VERSION = 1;
public MyDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// you can use an alternate constructor to specify a database location
// (such as a folder on the sd card)
// you must ensure that this folder is available and you have permission
// to write to it
//super(context, DATABASE_NAME, context.getExternalFilesDir(null).getAbsolutePath(), null, DATABASE_VERSION);
}
und das ist der Teil der Aktivität liest und schreibt Datenbank:
import android.database.SQLException;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
public class Compose extends AppCompatActivity {
TextView Count;
MyDatabase db;
private Globals globalVariable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newcard);
db = new MyDatabase(this);
Count=(TextView)findViewById(R.id.Count);
Count.setText(String.valueOf(db.getCardCount()));
Ich erwarte Ihre wertvollen Führer. BTW , könnte Android Studio nicht lösen com.readystatesoftware.sqliteasset.SQLiteAssetHelper
so hinzugefügt ich es manuell in libs Ordner (i dies gesagt, vielleicht ist erforderlich)
'Fehlende Datenbanken/meinDBName.db.zip Datei in Assets oder Zielordner nicht beschreibbar' - haben Sie die verpackte Datenbank an Ort und Stelle in der Fehlermeldung erwähnt? Im Hinblick auf Android Studio enthält [die 'SQLiteAssetHelper'-Dokumentation Anweisungen zum Hinzufügen der' compile'-Anweisung zu Ihrer 'app/build.gradle' Datei] (https://github.com/jgilfelt/android-sqlite-asset-helper #Konfiguration). Siehe auch [diese Beispiel-App von mir] (https://github.com/commonsguy/cw-omnibus/tree/master/Database/ConstantsAssets-AndroidStudio), die 'SQLiteAssetHelper' verwendet. – CommonsWare
@ CommonWare.was meinst du "paketierte Datenbank"? – mohamad
@ CommonWare. Ich habe gezippte db zu den Datenbanken unter Asset-Ordner hinzugefügt. – mohamad