1
votes

Chargement d'une image dans une boîte de dialogue personnalisée à partir d'une URL avec Picasso

J'ai créé une méthode où je peux charger une image à partir du dossier Drawable qui fonctionne bien, mais lorsque j'essayais de charger l'image à partir de URL et de la définir sur Imageview de ma mise en page personnalisée, elle ne renvoie que:

 <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>

Mon code Java est:

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(); 
}

Ma boîte de dialogue personnalisée est:

java.lang.IllegalArgumentException: Target must not be null.

J'ai essayé peut-être un moyen de résoudre ce problème, mais il est résolu, veuillez m'aider ...


1 commentaires

essayez de déplacer votre code après dialog.show ()


3 Réponses :


4
votes

Après l'avoir vérifié une fois de plus, je vois des choses étranges dans la 4ème ligne.

Essayez ceci

ImageDialog dialog = ImageDialog.getInstance(item.getImageUrl(), item.getName(), 1);
                dialog.show(fragmentManager, null);

Ou vous devez le faire à l'intérieur de View qui est-il déjà gonflé en premier, ceci est un exemple de code

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);
            }

        }

    }
}

Et pour appeler cette boîte de dialogue, effectuez cette action

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(); 
}


2 commentaires

Merci @Nanda Z ... Je suis vraiment approprié que vous ayez résolu la session très rapide


Je suis heureux d'entendre ça. C'est l'endroit qui rend le monde du codage pas si effrayant ... je partage ce que j'ai. Btw, vous pouvez voter pour ma réponse afin qu'elle soit utile aux autres développeurs.



0
votes
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); 
    dialog.show();
Picasso.with(ConveyanceAmtUpdateApprove.this).load("http://i.imgur.com/DvpvklR.png").into(FF_ReceiptImage);
}

will work fine

0 commentaires

0
votes

Le problème est que vous essayez d'obtenir une vue qui est nulle

Dialog dialog = new Dialog(this);
View dialogView = LayoutInflater.from(this).inflate(R.layout.custom_dialogbox_image,null,false);
ImageView dialogImage= dialogView.findViewById(R.id.FF_ReceiptImage);
Picasso.with(ConveyanceAmtUpdateApprove.this)
.load("http://i.imgur.com/DvpvklR.png")
.into(dialogViewImage);
dialog.setContentView(dialogView);
dialog.show(); 


0 commentaires