0
我的應用程序使用SQLiteAssetHelper
用時,我想用數據庫工作應用力closes.This預裝的database.but工作是logcat的:SQLiteAssetHelper不能讀取或寫入數據庫
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)
,這是SQLiteAssetHelper
類:
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);
}
這是讀寫活動的一部分數據庫:
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()));
我期待您的寶貴指導。 BTW,AndroidStudio無法解析com.readystatesoftware.sqliteasset.SQLiteAssetHelper
所以我說這將手動libs文件夾中(我告訴本報,也許需要)
'資產中的數據庫/ myDBName.db.zip文件丟失或目標文件夾中的文件不可寫 - - 您是否具有打包的數據庫在錯誤信息中提到?在Android Studio方面,['SQLiteAssetHelper'文檔有將'compile'語句添加到'app/build.gradle'文件的說明](https://github.com/jgilfelt/android-sqlite-asset-helper #建立)。另請參閱[我的示例應用程序](https://github.com/commonsguy/cw-omnibus/tree/master/Database/ConstantsAssets-AndroidStudio),它使用'SQLiteAssetHelper'。 – CommonsWare
@ CommonWare.what你的意思是「打包的數據庫」? – mohamad
@ CommonWare.I已將壓縮數據庫添加到資產文件夾下的數據庫。 – mohamad