如何解决如何将文件保存到外部存储,当前它创建文档但它的大小为 0B
我想用新方法备份我的数据库,我的目标sdk是30,我不知道我在这里做错了什么。 我将类型传递给 setType 但它只创建带有 0B 的文件。如何正确备份数据库。
我现在做的是
Intent i = new Intent(Intent.ACTION_CREATE_DOCUMENT);
i.setType("application/x-sqlite3");
i.putExtra(Intent.EXTRA_TITLE,DATABASE_NAME);
startActivity(i);
Toast.makeText(this,"done",Toast.LENGTH_SHORT).show();
那么当用户按下导出按钮时,如何将我的数据库和数据存储到外部存储中
解决方法
首先,为结果开始活动
Intent i = new Intent(Intent.ACTION_CREATE_DOCUMENT);
i.setType("application/x-sqlite3");
startActivityForResult(i,BACKUP_CODE);
此后它将创建大小为 0 B 的文件,因此我们必须在 onActivityResult 中写入备份。
@Override
protected void onActivityResult(int requestCode,int resultCode,@Nullable @org.jetbrains.annotations.Nullable Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if (requestCode == BACKUP_CODE) {
try {
assert data != null;
FileOutputStream stream = (FileOutputStream) getContentResolver().openOutputStream(data.getData());
Files.copy(Paths.get(getDatabasePath(DATABASE).toPath()),stream);
Toast.makeText(this,"done",Toast.LENGTH_SHORT).show();
stream.close(); ///very important
} catch (Exception e) {
Toast.makeText(this,"Error occurred in backup",Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
}
它将成功创建备份。它对我有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。