android - picasso 没有从画廊加载图像

标签 android picasso

我已经尝试了我为这个问题找到的所有答案,但都没有成功。 我的用户使用 Picasso 从他们的图库中选择要显示在 ImageView 中的图像,但它从未加载到 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,但原理相同。

最佳答案

已解决,方法是创建一个外部方法并在 onActivityResult 内部执行该方法。不知道为什么,但它奏效了。

关于android - picasso 没有从画廊加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36426034/

相关文章:

android - 水平 ListView 从 URL 加载相同的图像(使用 Picasso)

android - Picasso 的 resizeDimen() 方法采用 dp 还是像素?

android - 突出显示 PDF 上的文本

android - 如何使 NumberPicker 不再重复

android - 使用 Picasso 将位图加载到循环中的菜单项

android - 如何调整 Android 位图中图像的大小?

android - 代表公共(public)客户将 APK 发布到 Google Play 的更简单方法

android:textColorHighlight=透明被忽略

android - 如何调试android回调?

android - 使用 picasso 的 GIF 图像动画