【问题标题】:Empty image view on creating the file from Uri从 Uri 创建文件时的空图像视图
【发布时间】:2017-05-19 10:48:37
【问题描述】:

通过相机意图捕获图像 => new Intent(MediaStore.ACTION_IMAGE_CAPTURE).putExtra(MediaStore.EXTRA_OUTPUT, photoUri);

  1. 将 Uri 转换为字符串 => String image = photoUri.toString();
  2. 从同一个字符串中检索 Uri => Uri uri = Uri.parse(image);
  3. 从 Uri 创建文件 => File imageFile = new File(uri.getPath());

相机意图工作正常,但最终文件,即imageFile 是一个空图像文件。

【问题讨论】:

  • 你检查过文件大小吗?
  • "从 Uri 创建文件 => 文件 imageFile = new File(uri.getPath());" ——这很可能是不正确的。请编辑您的问题并显示您如何为photoUri 赋值。此外,第 1 步和第 2 步毫无意义,因为它们所做的只是将photoUri 退回给您。
  • 我正在创建一个文件 imageFile 并将 photoUri 创建为 FileProvider.getUriForFile(mActivity, mActivity.getApplicationContext().getPackageName() + ".provider", imageFile)
  • @pskink 我正在尝试将图像文件上传到服务器。图片在指定的ImageView中成功显示。

标签: java android file android-intent uri


【解决方案1】:

使用下面的代码:

File imageFile = new File(getPath(uri));
public String getPath(Uri uri) 
{
    Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 

    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String s=cursor.getString(column_index);
    cursor.close();
    return s;
}

【讨论】:

  • Cursor cursor = context.getContentResolver().query(contentUri, null, null, null, null); if (cursor == null) { return contentUri.getPath(); } else { cursor.moveToFirst(); int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); String realPath = cursor.getString(index); cursor.close(); return realPath; } 我试过这个但是得到索引-1,即数据不可用
  • int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 行出现错误 java.lang.IllegalArgumentException: column '_data' does not exist
  • 你确定你得到了正确的 uri 值吗?
【解决方案2】:

我想从 URI 创建文件,我面临的挑战是我要获取格式为 content:// 的 URI

所以我尝试了以下方法:

MediaStore.Images.Media.getBitmap(getContentResolver(), uri) 返回了位图,所以如果我想在ImageView 中显示图像,我可以选择使用imageView.setImageBitmap(MediaStore.Images.Media.getBitmap(getContentResolver(), uri)),或者使用以下代码从位图创建文件,如下所示:

FileOutputStream fOutputStream = new FileOutputStream(filePath); BufferedOutputStream bOutputStream = new BufferedOutputStream(fileOutputStream); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); //compress format JPEG bos.flush(); bos.close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多