作成したデータベースのsqliteファイルをアンドロイドメモリからsdcardにコピーしようとしていますが、「コピーに失敗しました」というエラーが表示されています。それは簡単にコピーすることができるようにデータベースのsqliteファイルを作成する方法はありますか?デバイスのどこにでもアクセス許可を設定する必要がありますか?どのようにsdcardにアンドロイドデータベースsqliteファイルをコピーするには?
答えて
はいあなたがアクセス権が必要ですし、23未満の場合はどのようにAPIに依存して、あなたはあなたのマニフェスト(のAndroidManifest.xml)で
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
を持っている必要があります。
23以上の場合は、特にAccsessを要求する必要があります。例えばアクティビティで(私はそれは常にをチェックされているので、MainActivityでこれを持っている)持っている: -
if(Build.VERSION.SDK_INT >= 23) {
ExternalStoragePermissions.verifyStoragePermissions(this);
}
ExternalStoragePermissionsクラスは次のとおりです。 -
class ExternalStoragePermissions {
public int API_VERSION = Build.VERSION.SDK_INT;
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
//Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
public static final String THISCLASS = ExternalStoragePermissions.class.getSimpleName();
public ExternalStoragePermissions() {}
// Note call this method
public static void verifyStoragePermissions(Activity activity) {
int permission = ActivityCompat.checkSelfPermission(
activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if(permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}
}
これは、アクセスを許可するようにユーザに促します。
PS私は両方の状況に対処するように両方のコードをエンコードしています。
実際には、バックアップがコピーであるバックアップ/リストアが機能しています。しかし、それはかなり長く巻き込まれているかもしれません。私は多くの状況を処理しようとしました。私は実際にダウンロードフォルダに作成されたフォルダにバックアップします。
PS SQLite Managerのようなものがあれば、ファイルをPCにコピーして開くこともできます(接続する)。私はこれを使ってクエリなどをテストします。あなたはデータベースを修正してそれを元に戻すこともできます(リストア側のため非常に簡単です)。私は非SQLiteファイルをコピーして元の状態から復元すると何が起きるか見ていました(基本的には対処していますが、アプリケーションを閉じてから再開して予期しない結果を回避する必要があります)。この長さ/畳み込みの例として
は私が最初のチェックの一つである: - :これらは
/**************************************************************************
* method saveDB save a file copy of the Database
*/
private void saveDB() {
busy.show();
errlist.clear();
confirmaction = true;
String dbfilename = this.getDatabasePath(
DBConstants.DATABASE_NAME).getPath();
dbfile = new File(dbfilename);
backupfilename = directory.getText().toString() +
"/" +
backupfullfilename.getText().toString();
new Thread(new Runnable() {
@Override
public void run() {
try {
FileInputStream fis = new FileInputStream(dbfile);
OutputStream backup = new FileOutputStream(backupfilename);
//byte[] buffer = new byte[32768];
int length;
while((length = fis.read(buffer)) > 0) {
backup.write(buffer, 0, length);
}
backup.flush();
backup.close();
fis.close();
}
catch (IOException e) {
e.printStackTrace();
errlist.add("Database backup failed with an IO Error. Error Message was " +
e.getMessage() +
"/n/tFile Name was " +
backupfilename);
confirmaction = false;
}
runOnUiThread(new Runnable() {
@Override
public void run() {
busy.dismiss();
AlertDialog.Builder dbbackupresult = new AlertDialog.Builder(context);
dbbackupresult.setCancelable(true);
if(confirmaction) {
dbbackupresult.setTitle("DB Data Backed up OK.");
dbbackupresult.setMessage("DB Data successfully saved in file \n\t" +
backupfilename);
} else {
dbbackupresult.setTitle("DB Backup Failed.");
String emsg = "";
for(int i = 0; i < errlist.size(); i++) {
emsg = emsg + errlist.get(i);
}
}
dbbackupresult.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}
});
}
}).start();
注 - 私が使用バックアップ自体の
// External Storage must be mounted.
String chkmnt = Environment.getExternalStorageState();
if(!(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))) {
switch (Environment.getExternalStorageState()) {
case Environment.MEDIA_SHARED : {
errorlist.add(
"Although External Storage is present." +
" It cannot be used as it's in use via USB." +
"\nDisconnect the USB cable and then try again."
);
break;
}
case Environment.MEDIA_REMOVED : {
errorlist.add(
"External Storage is not present." +
"\nInsert an SC Card."
);
break;
}
case Environment.MEDIA_EJECTING : {
errorlist.add(
"External Storage is being ejected." +
"\nRe-insert the SD Card."
);
break;
}
case Environment.MEDIA_NOFS : {
errorlist.add(
"External Storage is blank or does not have the correct" +
" filesystem present." +
"\nUse a valid SDCard."
);
break;
}
case Environment.MEDIA_BAD_REMOVAL : {
errorlist.add(
"External Storage was removed incorrectly." +
"\nRe-insert the SD Card, if this fails then" +
" try restarting the device."
);
break;
}
case Environment.MEDIA_CHECKING : {
errorlist.add(
"External Storage is unavailable as it is being checked." +
"\nTry again."
);
}
case Environment.MEDIA_MOUNTED_READ_ONLY : {
errorlist.add(
"External Storage is READ ONLY." +
"\nInsert an SD card that is not protected."
);
}
case Environment.MEDIA_UNKNOWN : {
errorlist.add(
"External Storage state is UNKNOWN." +
"\ntry a different SD Card."
);
}
case Environment.MEDIA_UNMOUNTABLE : {
errorlist.add(
"External Storage cannot be mounted." +
"\nTry re-inserting the SD Card or using a different SD Card."
);
}
case Environment.MEDIA_UNMOUNTED : {
errorlist.add(
"External Storage is not mounted." +
"\nTry re-inserting the SD Card or using a different SD Card."
);
}
default: {
errorlist.add(
"Undefined Error"
);
}
}
this.errorcode = UNMOUNTED;
return;
} else {
this.mounted = true;
}
// Get the require directory and specified sub directory
File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),subdirectory);
this.directory = dir.getPath();
含まれていないコードを抽出して参照することがあります。例えば<:名=「android.permission.WRITE_EXTERNAL_STORAGE」/使用許可 アンドロイド> `許可busy
がprogressdialogで、directory
チェックルーチンが
- 1. ファイルをsdcardにコピーする
- 2. どのようにアンドロイドデータベースに時間を格納する
- 3. どのようにSdCard上のフォルダを作成し、1つから別のファイルをコピーする方法
- 4. /assetsからsdcardにジップをコピーする
- 5. sdcardからシステムにファイルをコピーする方法
- 6. 一般的な.dbファイルをsdcardにコピーする
- 7. open failed:ENOENT(そのようなファイルやディレクトリはありません)エラーAssetからSdCardにファイルをコピー
- 8. ファイルをsdcardに表示するにはどうしたらいいですか?
- 9. どのように自分のsqliteファイルからlistviewを設定するには?
- 10. どのようにファイルとフォルダツリーをリモートマシンにコピーしますか?
- 11. どのようにアンドロイドエミュレータでsdcardからビデオファイルを表示するには?
- 12. Gradle:POMファイルをWARにコピーするにはどうすればよいですか?
- 13. Android:インストール時にアセットをsdcardにコピーする
- 14. 既存のsqliteデータベースファイルをアセットからデータベースフォルダにコピーするにはどうすればよいですか?
- 15. どのようにsdcardから単一のイメージを動的に表示する
- 16. データベースの新しいエントリをゼロ位置に保存する - アンドロイドデータベースsqlite
- 17. SQLite .NETのパフォーマンス、どのように高速化するには?
- 18. android - sdcardのフォルダに画像をコピーする方法
- 19. どのように変数に基づいて1つのファイルをコピーする
- 20. AndroidプラットフォームのSDCARDでファイル/フォルダを削除するにはどうすればよいですか?
- 21. どのようにsqliteクエリをより効率的にするには?
- 22. オフラインのsqliteデータベースにPDFなどのファイルを保存するにはどうすればよいですか?
- 23. どのようにAndroidデバイス上のcsvファイルにsqliteデータベースをエクスポートしますか?
- 24. SQLite&Linq - .dbmlファイルをどのように視覚的にデザインできますか?
- 25. どのようにiPadにHTMLファイルをコピーして、ブラウザで起動するように
- 26. データフォルダにsqliteデータベースをコピー
- 27. どのようにSqliteブラックベリーのKnowTableカウント
- 28. AndroidイメージをSQLiteまたはSDCardまたはメモリに保存する
- 29. .DBFファイルのデータがSQLiteファイルにコピーされない
- 30. ロング値をアンドロイドデータベースに保存
呼び出されたときに移入され
EditText
であるあなたは、'設定したのですか? –'簡単にコピーできるようにデータベースのsqliteファイルを作成する方法はありますか?奇妙な質問。ファイルをコピーする場合は、すでにファイルが存在するはずです。 – greenapps
データベースファイルがSQLiteDatabaseクラスによって作成/読み込まれる場所を指定することができます。なぜコピーする必要がありますか? –