0

DatabaseInterface実装を開き、基本的に閉じないように実装を変更しようとしてMyApplication extends Applicationいます (いくつかの調査を行ったところ、Google のエンジニアが推奨しています。リンクされた質問のデータベース接続を閉じるのに最適な場所を参照してください)。私が行った変更はごくわずかですが、データベースを開くときにシステムから次のエラーがスローされます。

E/SQLiteDatabase(15690): android.database.sqlite.SQLiteException: not an error (code 0): Could not open the database in read/write mode.

ここに関連するコードがあります

MyApplication.java

@Override
public void onCreate() {
    super.onCreate();
    try {
        DatabaseInterface.open();
    } catch (SQLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

DatabaseInterface.java

public class DatabaseInterface extends SQLiteOpenHelper {

    private final static String DB_PATH = Constants.DB_PATH;
    private final static String DB_NAME = Constants.DB_NAME;
    private static SQLiteDatabase mDatabase;
    private Context mContext;
    private static DatabaseInterface mInstance;

    private DatabaseInterface(Context context) {
        super(context, DB_NAME, null, 1);
        this.mContext = context;
    }

    public static DatabaseInterface getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new DatabaseInterface(context);
        }
        return mInstance;
    }

    public static void open() throws SQLException, IOException {
        //Open the database
        String path = DB_PATH + DB_NAME;
        mDatabase = SQLiteDatabase.openOrCreateDatabase(new File(path), null);
    }
}
4

1 に答える 1

3

わかりました、これは私が追加するのを忘れたことが原因でした

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

AndroidManifest.xmlのデータベースは電話の外部ストレージにあるので、私に。

于 2013-04-03T01:09:09.620 に答える