【问题标题】:Android image from photo gallery来自照片库的 Android 图像
【发布时间】:2017-02-16 07:21:39
【问题描述】:
System.out.println("weeeeeeeee");
try {
    Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
    System.out.println("111111");
    System.out.println(Common.getIm1());
    Common.getIm1().setImageBitmap(thumbnail);
}
catch(Exception e)
{
    System.out.println("dakfls" + e.getMessage());
}

在那个 onactivityresult 函数中基本上发生了什么,它给了我以下错误。 dakflsAttempt 在空对象引用上调用虚拟方法“java.lang.Object android.os.Bundle.get(java.lang.String)”。在打印 1111 之前发生崩溃。 我需要完整的图像而不是缩略图

我像这样从我的片段开始调用

try
{
    Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    getActivity().startActivityForResult(i, 100);
}
catch(Exception e)
{

}

【问题讨论】:

  • 为什么一切都在 try-catch 中?

标签: android image


【解决方案1】:

要正确接收来自ACTION_PICK 的数据,您必须在Intent 上使用getData()。像这样:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case 100:
        if (resultCode == RESULT_OK) {
             Uri imageUri = data.getData();
             Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
             Common.getIm1().setImageBitmap(bitmap);
        }
        break;
    }
}

注意:您应该将代码 100 放在班级顶部的 static final int 中。

【讨论】:

    【解决方案2】:

    试试这个代码

    Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(i, 100);
    

    您将在 onActivityResult 上获得图片路径:

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 100 && resultCode == RESULT_OK && null != data) {
                Uri selectedImage = data.getData();
                String[] filePathColumn = { MediaStore.Images.Media.DATA };
                Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                String picturePath = cursor.getString(columnIndex);
                cursor.close();
                ImageView imageView = (ImageView) findViewById(R.id.imgView);
                imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
            }
        }
    

    【讨论】:

      【解决方案3】:

      你只需要使用返回的Intent中的数据,就是content style Uri,用ContentResolver查询或者打开

      Uri dataUri = data.getData();
      ContentResolver contentResolver = getContentResolver();
      InputStream stream = contentResolver.openInputStream(dataUri); //if you sure this content Uri is refer a file
      BitmapFactory.decodeStream(stream);
      

      【讨论】:

        【解决方案4】:
         photoBrowseButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
        
                    Intent intent = new Intent(Intent.ACTION_PICK,
                            MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    startActivityForResult(intent, DataHolder.INTENT_BROWSE_GALLERY);
                }
            });
        

        并按照您的意愿使用图像的uri,如下所示

         @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == DataHolder.INTENT_BROWSE_GALLERY) {
                if (data != null) {
                    Uri targetUri = data.getData();
        
                }
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多