毕加索没有从图库

时间:2016-04-05 12:10:53

标签: android picasso

我已经尝试过我在这个问题上找到的每一个答案都没有成功。 我的用户从他们的图库中选择一个图像,使用Picasso在ImageView中显示,但它永远不会被加载到图像视图中。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode,resultCode,data);
    if(resultCode == RESULT_OK){
        if(requestCode == SELECT_PICTURE){

            String selectedImageURI = data.getData().getPath();
            File imageData = new File(String.valueOf(selectedImageURI));
            //selectedImagePath = getPath(selectedImageURI);

            if(!image1_exists){
                Picasso.with(MemoriesActivity.this).load(imageData).noPlaceholder().centerCrop().fit().into(image1);
            }
            else if(!image2_exists){
                //This is executed
                Picasso.with(MemoriesActivity.this).load(imageData).noPlaceholder().centerCrop().fit().into(image2);
            }
            else if(!image3_exists){
                //Picasso.with(MemoriesActivity.this).load(imageData).centerCrop().fit().into(image3);
            }
        }

    }
}

public void addPhoto(View v){

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

}

我找不到任何可解释的原因除了onActivityResult与Picasso一起出现问题之外,因为我从后端获取图像时使用完全相同的Picasso构建/方法加载图像。

编辑解决方案

public void attachImage(Uri uri, int imageIndex) {

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 0;

    InputStream stream;
    try {

        stream = getContentResolver().openInputStream(uri);

        Bitmap bitmap = BitmapFactory.decodeStream(stream);
        Bitmap image_scaled = Bitmap.createScaledBitmap(bitmap, 800, 800 * bitmap.getHeight() / bitmap.getWidth(), false);


        if (imageIndex == 0) {
            uploadImage(image_scaled, "image1");
            handler.get(imageIndex).loadImageFromUri(this,(ImageView) findViewById(R.id.image1),uri);
            handler.get(imageIndex).loadEnlargedImageFromUri(this,image1_full,uri);
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

}

所以我创建了这个方法(它正在构建中,但解决方案保持不变)并在 onActivityResult 中调用它:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == SELECT_PICTURE) {

            Uri selectedImage = data.getData();

            int imageIndex = getFirstNonExistingImage();

            if (imageIndex == 0) {
                attachImage(selectedImage,imageIndex);
            }

        }

    }
}

我使用自定义Picasso类(handler.loadImageFromUri)加载URI,但原理相同。

3 个答案:

答案 0 :(得分:1)

通过创建外部方法并在onActivityResult中执行该方法来

解决。不明白为什么,但它有效。

答案 1 :(得分:0)

从URI获取真实路径并将其设置为Picasso。

 Uri selectedImage = data.getData();

 imagePath = getRealPathFromURI(this, selectedImage);

 public String getRealPathFromURI(Context context, Uri contentUri) {

 Cursor cursor = null;

 try {

  String[] proj = {MediaStore.Images.Media.DATA};

   cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

答案 2 :(得分:0)

您不需要使用毕加索进行游标查询。

使用毕加索你只需要编写一行代码我已扩展它以便更好地理解: -

           //Get image Uri
            Uri selectedImageURI = data.getData();

            //Load image from picked Uri
Picasso.with(MainActivity1.this).load(selectedImageURI).noPlaceholder().centerCrop().fit()
                    .into((ImageView) findViewById(R.id.imageView1));