gpt4 book ai didi

java - 从 Uri 类型 android 创建文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:31:36 25 4
gpt4 key购买 nike

我尝试从图库中选择图像,然后将此图像转换为文件并通过 HttpPost 发送,但我总是遇到 FileNotFoundException。这是我的代码:

选择照片

public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 1) {
// currImageURI is the global variable I’m using to hold the content:
currImageURI = data.getData();
//Save the currImageUri (URI type) to global variable.
photosHolder.getInstance().setOneIm(currImageURI);
}
}
}

正在转换照片

                // First Try
File myFile = new File((photosHolder.getInstance().getOneIm()).toString());
params.put("visit_report[photos_attributes][0][file]",myFile); **The exception Raised here
// second try
File myFile2 = new File((photosHolder.getInstance().getOneIm()).getPath());
params.put("visit_report[photos_attributes][1][file]",myFile2); ** Also here

那些是调试时的 myFiles 值:

mFile : content:/com.android.providers.media.documents/document/image%3A19143
myFile2 : /document/image:19143

那么有什么帮助吗?


更新我也尝试过这个解决方案:

//get The real path from uri then save it (and then use it to create the file)
photosHolder.getInstance().setUriString(getRealPathFromURI(currImageURI));

//Convert the image URI to the direct file system path of the image file
private String getRealPathFromURI(Uri contentURI) {
String result = "";
try {
Cursor cursor = getActivity().getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) { // Source is Dropbox or other similar local file path
result = contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
result = cursor.getString(idx); // Exception raised HERE
cursor.close(); }
} catch (Exception e) {
e.printStackTrace();
}
return result;
}

但是我得到了 java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow。确保 Cursor 在访问数据之前正确初始化 并且 idx var == to -1

我也尝试过@Praneeth Kalluri 解决方案,但结果总是返回 null。

最佳答案

 Uri currImageURI = data.getData();

打印 currImageURI 会给你这样的东西:

content://media/external/images/media/47

但我们需要的是该特定图像的绝对路径。所以我们需要从uri获取真实路径

public String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Images.Media.DATA };
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}

现在修改你的代码

public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 1) {
// currImageURI is the global variable I’m using to hold the content:
currImageURI = data.getData();
//Save the currImageUri (URI type) to global variable.
photosHolder.getInstance().setOneIm(getRealPathFromURI(getActivity(),currImageURI));
}
}
}

public String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Images.Media.DATA };
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}

关于java - 从 Uri 类型 android 创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27103529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com