あなたの質問はそれほど明確ではありませんが、私は答えようとします。
ほとんどの場合、データベースは次のいずれかです。
- まだ存在していないので、作成する必要があります;
- データベースファイルは読み取り専用です。変更する必要があります(この質問は関連している可能性があります)。
#2の場合、SQLiteOpenHelper#getReadableDatabase()
を使用する代わりに 、SQLiteOpenHelper#getWritableDatabase
を使用します
データベースが外部ストレージユニット上にある場合は、他に確認すべきことがいくつかあります。
- 外部ストレージは現在マウントされていますか?そうでない場合、データベースにアクセスできません。
- 読み取り専用としてマウントされていますか?その場合は、これを変更する必要があります。
- パスを確認しましたか?正しいですか?
問題はこれらのトピックのいずれかにある可能性があります。
読み取り専用としてマウントされているかどうかを確認するには、次のことを試してください。
/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
ここから撮影。
Environment
の詳細については クラスについては、ドキュメントを参照してください。