使用 Picasso 从 URL 加载自定义对话框中的 iImage

Ham*_*man 1 java android android-imageview

我创建了一个方法,可以从 Drawable 文件夹加载图像,该方法工作正常,但是当我尝试从URL加载图像并将其设置在我的自定义布局的 Imageview 上时,它仅返回:

java.lang.IllegalArgumentException: Target must not be null.
Run Code Online (Sandbox Code Playgroud)

我的Java代码是:

public void CustomDialogLoadImage() {
    Dialog dialog = new Dialog(this);
    ImageView FF_ReceiptImage = (ImageView) dialog.findViewById(R.id.FF_ReceiptImage);
    Picasso.with(ConveyanceAmtUpdateApprove.this).load("http://i.imgur.com/DvpvklR.png").into(FF_ReceiptImage);
    dialog.setContentView(R.layout.custom_dialogbox_image);
    dialog.show(); 
}
Run Code Online (Sandbox Code Playgroud)

我的自定义对话框是:

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/FF_ReceiptImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:src="@drawable/mobile_sales_img"
        android:layout_gravity="center"
        android:background="@drawable/border"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我已经尝试了可能的方法来解决这个问题,但它已经解决了,请帮助我......

Nan*_*a Z 5

当我再检查一遍后,我在第四行看到了奇怪的东西。

尝试这个

public void CustomDialogLoadImage() {
    Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.custom_dialogbox_image);
    ImageView FF_ReceiptImage = (ImageView) dialog.findViewById(R.id.FF_ReceiptImage);
    Picasso.with(ConveyanceAmtUpdateApprove.this).load("http://i.imgur.com/DvpvklR.png").into(FF_ReceiptImage);

    dialog.show(); 
}
Run Code Online (Sandbox Code Playgroud)

或者你必须在 View 中执行它,它已经先膨胀了,这是示例代码

public class ImageDialog extends DialogFragment {

    public static final String ARG_IMAGE_URI = "arg_image_uri";
    public static final String ARG_IMAGE_NAME = "arg_image_name";
    public static final String ARG_IMAGE_ID_CHANNEL = "arg_image_id_channel";

    public ImageDialog(){ // if no argument you can use empty constructor }
    public static ImageDialog getInstance(String uriStr, String imageName, int idChannel){

        ImageDialog imageDialog = new ImageDialog();
        Bundle bundle = new Bundle();
        bundle.putString(ARG_IMAGE_URI, uriStr);
        bundle.putString(ARG_IMAGE_NAME, imageName);
        bundle.putInt(ARG_IMAGE_ID_CHANNEL, idChannel);
        imageDialog.setArguments(bundle);
        return imageDialog;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
       // inflate first with your own layout dialog 
       return inflater.inflate(R.layout.popup_image_dialog, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // Look this part
        ImageView imageView = view.findViewById(R.id.popup_image);
        //-------------
        Bundle bundle = getArguments();
        if(bundle != null){
            String name = bundle.getString(ARG_IMAGE_NAME);
            getDialog().setTitle(name);
            String imageUri = bundle.getString(ARG_IMAGE_URI);
            int idChannel = bundle.getInt(ARG_IMAGE_ID_CHANNEL);
            if(idChannel == 0){
                Picasso.with(getContext())
                        .load(new File(imageUri))
                        .into(imageView);

            }else {
                Picasso.with(getContext())
                        .load(imageUri)
                        .into(imageView);
            }

        }

    }
}
Run Code Online (Sandbox Code Playgroud)

并调用此对话框执行此操作

ImageDialog dialog = ImageDialog.getInstance(item.getImageUrl(), item.getName(), 1);
                dialog.show(fragmentManager, null);
Run Code Online (Sandbox Code Playgroud)