从HTC上的文件加载图像

时间:2014-09-12 12:47:39

标签: android

在HTC中,不显示ImageView中的图片。我试图从文件中上传图片:

Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                i.setType("image/jpeg");
                startActivityForResult(i, 0);

接受结果:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            {
              if (data != null) {
                    if (requestCode == 0){
                        Uri selectedImage = data.getData();
                        loadImageToImageView(selectedImage);
                        }
                    } 
            }
        }
    }

在loadImageToImageView(Uri uri)的后台执行:

protected Bitmap doInBackground(String... file) {
   InputStream in = null;
        Bitmap bitmap = null;
        try {
            in = getContentResolver().openInputStream(uri);
            bitmap = BitmapFactory.decodeStream(in);
            new WeakReference<Bitmap>(bitmap);
        } catch (Exception e) {
            //....
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (IOException ioex) {
                //....
            }
        }
return bitmap;
}


protected void onPostExecute(Bitmap result) {
        if (result != null) {
            imageView.setImageBitmap(result);
        }
    }

在HTS ONE X上没有显示照片。问题是什么?在其他设备上一切正常。 URI不为NULL,没有错误

1 个答案:

答案 0 :(得分:0)

请尝试这种方式,希望这有助于您解决问题。

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, ""), 0);

public void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (resultCode == Activity.RESULT_OK) {
       if (data != null) {
           if (requestCode == 0){
              imageView.setImageBitmap(decodeFile(getAbsolutePath(data.getData())));
           }
       }
   }
}

public String getAbsolutePath(Uri uri) {
   if(Build.VERSION.SDK_INT >= 19){
      String id = uri.getLastPathSegment().split(":")[1];
      final String[] imageColumns = {MediaStore.Images.Media.DATA };
      final String imageOrderBy = null;
      Uri tempUri = getUri();
      Cursor imageCursor = getContentResolver().query(tempUri, imageColumns,MediaStore.Images.Media._ID + "="+id, null, imageOrderBy);
      if (imageCursor.moveToFirst()) {
          return imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
      }else{
          return null;
      }
   }else{
      String[] projection = { MediaStore.MediaColumns.DATA };
      Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
      if (cursor != null) {
          int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
          cursor.moveToFirst();
          return cursor.getString(column_index);
       } else{
          return null;
       }
   }

private Uri getUri() {
  String state = Environment.getExternalStorageState();
  if(!state.equalsIgnoreCase(Environment.MEDIA_MOUNTED))
     return MediaStore.Images.Media.INTERNAL_CONTENT_URI;
  else
     return MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
}


public Bitmap decodeFile(String path) {
  try {
       BitmapFactory.Options o = new BitmapFactory.Options();
       o.inJustDecodeBounds = true;
       BitmapFactory.decodeFile(path, o);
       // The new size we want to scale to
       final int REQUIRED_SIZE = 70;
       // Find the correct scale value. It should be the power of 2.
       int scale = 1;
       while (o.outWidth / scale / 2 >= REQUIRED_SIZE && o.outHeight / scale / 2 >= REQUIRED_SIZE)
             scale *= 2;
       // Decode with inSampleSize
       BitmapFactory.Options o2 = new BitmapFactory.Options();
       o2.inSampleSize = scale;
       return BitmapFactory.decodeFile(path, o2);
  } catch (Throwable e) {
       e.printStackTrace();
  }
  return null;
 }