Android:使用Ion Koush库将图像文件上传为多部分文件时获取文件路径

时间:2019-03-04 15:26:36

标签: java android android-intent ion-koush

我通过以下意图选择图像:

Intent getIntent = new Intent(Intent.ACTION_GET_CONTENT);
getIntent.setType("image/*");

Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickIntent.setType("image/*");

Intent chooserIntent = Intent.createChooser(getIntent, "Select Image");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {pickIntent});

startActivityForResult(chooserIntent, PICK_IMAGE);

我通过覆盖onActivityResult来检索意图

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == PICK_IMAGE) {
        Uri imageUri = data.getData();
        ProfileCalls.editProfileImage(imageUri, getContext()); //Ion post data
    }
}

然后我尝试以以下方式获取图像的路径,这将引发以下异常 java.io.FileNotFoundException: /external/images/media/5302 (No such file or directory)

public static void editProfileImage(Uri profileImageUri, final Context context) {
    Ion.with(context)
            .load("url")
            .setMultipartFile("profileImage", "application/json; charset=UTF-8", new File(profileImageUri.getPath()))
            .asJsonObject()
            .setCallback(new FutureCallback<JsonObject>() {
                @Override
                public void onCompleted(Exception e, JsonObject result) {
                    System.out.print(e);
                    System.out.print(result);
                }
            });
}

1 个答案:

答案 0 :(得分:0)

这是我后来在这里找到的答案

private static String getPath(Context context, Uri uri) {
    String result = null;
    String[] proj = {MediaStore.Images.Media.DATA};
    Cursor cursor = context.getContentResolver().query(uri, proj, null, null, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            int column_index = cursor.getColumnIndexOrThrow(proj[0]);
            result = cursor.getString(column_index);
        }
        cursor.close();
    }
    if (result == null) {
        result = "Not found";
    }
    return result;
}