【问题标题】:Get path from Uri throws nullpointerexception从 Uri 获取路径抛出空指针异常
【发布时间】:2018-03-20 00:47:25
【问题描述】:

我尝试获取图像文件的路径,但 getPath() 方法返回 null(光标为 null)。

public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor != null) {
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } else
            return null;
    }

selectedImageUri = data.getData();

                String selectedPath = getPath(selectedImageUri);

我真的不知道如何解决这个问题。

【问题讨论】:

  • 仅供参考。在您的方法public String getPath(Uri uri) 中,您有内存泄漏,因为您在返回结果时忘记关闭您的cursor

标签: android image path uri


【解决方案1】:

Uri 不必代表文件系统上您可以访问的文件。 Uri 可能指向以下内容:

  • 存储在您无法访问的可移动存储中
  • 存储在另一个应用的内部存储中,您无法访问
  • 以加密形式存储,ContentProvider 需要对其进行解密
  • 存储在 SQLite 数据库的 BLOB 列中,ContentProvider 需要在其中加载并提供服务
  • 存储在“云端”中,ContentProvider 需要下载它
  • 动态生成,此网页的方式
  • 等等

您可以使用ContentResolveropenInputStream()Uri 所代表的内容上获得InputStream。您可以在您控制的某个文件上创建FileOutputStream。而且,您可以使用 Java I/O 从 InputStream 复制到 OutputStream,在您控制的文件中制作您自己的内容副本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 2020-11-22
    • 2020-08-10
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多