【发布时间】:2021-09-14 22:34:44
【问题描述】:
我正在开发一个应用程序,并且在最重要的活动中必须发生以下情况:
- 用户填写表格并从手机中选择图片。
- 当他单击添加数据时,我想将所选图像(或路径,任何可以让我稍后检索它的任何内容)保存到本地数据库并稍后在其他活动中检索。
我尝试过的事情:
- 将图像作为 blob 保存到 db 并稍后作为位图检索,但显然我了解到当使用更大尺寸的图像时这会失败,blob 设置为 null。
- 尝试获取所选图像的文件路径,但该文件路径的格式类似于:
/document/msf:35
然后我尝试使用这些 SO 答案获取物理路径:link1、link2、link3 以及这些答案通常:link4、link5。
请不要将此标记为重复,因为其他答案中的解决方案对我不起作用
上传照片的打开意图:
// upload photo
photoActivityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK) {
Intent intent = result.getData();
if (intent.getData() == null) {
Log.d("AddTrip", "null data from image");
}
Uri uri = intent.getData();
// processing here..
}
}
});
}
private void uploadPhotoClicked() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
photoActivityResultLauncher.launch(intent);
}
请提出解决此问题的解决方案以及实现此类功能的最佳实践,我已尝试使用 PathUtil,但它没有为某些图像提供路径。
【问题讨论】:
-
如果您使用托管服务,您可能希望将图片上传到
File Manager或其他地方(例如cPanel)并将URL 存储在数据库中。 -
我没有使用托管服务。我存储的所有内容都在本地 sqlite 数据库中。
-
您应该将 uri.toString() 保存到数据库。不是 uri.getPath()。
-
并使用 ACTION_OPEN_DOCUMENT 而不是 ACTION_GET_CONTENT,这样您就可以在 uri.toString() 上获得持久 uri 权限。
标签: android android-studio android-external-storage android-internal-storage