无法使用图库意图从GoogleStorageURI(Google云端硬盘图像uri)将图像加载到imageview中

时间:2019-03-29 11:37:53

标签: android android-intent imageview android-gallery

我已经从Google云端硬盘存储空间下载了图片。我想使用Gallery Intent在我的应用程序中将此图像设置为imageview。

在onActivityResult中收到的图像的Uri:content://com.google.android.apps.docs.storage/document/acc%3D2%3Bdoc%3Dencoded%3DWe%2BdXDcNgTeulVk1Ntu3YfRYkm9wk7uTdTG6LFVyck1BxY4g7xAxy>

我正在使用此代码从url获取真实路径:

 if ("com.google.android.apps.docs.storage".equals(uri
                    .getAuthority())) {

    //content://com.google.android.apps.docs.storage/document/acc%3D2%3Bdoc%3Dencoded%3DWe%2BdXDcNbYeulVk1Ntu3YfRYkm9wk7uTdTG6LE6yck1BxY4g7xAxyPAgtMtz4A%3D%3D

 final String docId = DocumentsContract.getDocumentId(uri);
                    final String id = docId.split(";")[1];
                    final String[] selectionArgs = new String[]{id};
                    //String[] column = {MediaStore.Images.Media.DATA};


                    // where id is equal to
                    String selection = MediaStore.Images.Media._ID + "=?";
                    Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

                    //..
                    Cursor cursor = null;
                    String filePath = null;
                    try {
                        String[] column = {MediaStore.Images.Media.DATA};

                        cursor = context.getContentResolver().query(contentUri,
                                column, selection, selectionArgs, null);
                        if (cursor != null && cursor.moveToFirst()) {
                            int columnIndex = cursor.getColumnIndex(column[0]);
                            filePath = cursor.getString(columnIndex);
                        }
                    } finally {
                        if (cursor != null)
                            cursor.close();

                        return filePath;


 }
            }

.....

但是我得到了NULL游标。因此,文件路径始终为空/空。

任何人,请问我在做什么错?

1 个答案:

答案 0 :(得分:0)

  

我正在使用此代码从url获取真实路径

删除它。

  

任何人,请问我在做什么错?

您正在使用该代码。

Uri传递到您喜欢的图像加载库(Glide,毕加索等)。只需几行代码,它将为您完成所有工作,填充ImageView

或者,如果您坚持要自己做:

  • 使用ContentResolveropenInputStream()InputStream所标识的内容上获得Uri
  • 使用BitmapFactory.decodeStream()根据该Bitmap获取一个InputStream
  • 在后台线程上执行这两个步骤,因为您不应该在主应用程序线程上执行磁盘I / O和图像解码
  • 在主应用程序线程上,将Bitmap放入您的ImageView中,