web-dev-qa-db-fra.com

Picasso IllegalArgumentException La cible ne doit pas être nulle

J'essaie de définir une image en utilisant la bibliothèque Picasso dans mon projet. 

Lorsque je clique sur l'image de la vue, j'obtiens une erreur lors de l'exécution de Picasso.

Logcat de l'application

  Java.lang.IllegalArgumentException: Target must not be null.
            at com.squareup.picasso.RequestCreator.into(RequestCreator.Java:340)
            at com.squareup.picasso.RequestCreator.into(RequestCreator.Java:326)
            at com.zafer.celaloglu.FragmentsandActivities.UnfoldableDetailsFragment.openDetails(UnfoldableDetailsFragment.Java:89)
            at com.zafer.celaloglu.model.PaintingsAdapter.onClick(PaintingsAdapter.Java:52)
            at Android.view.View.performClick(View.Java:4084)
            at Android.view.View$PerformClick.run(View.Java:16966)
            at Android.os.Handler.handleCallback(Handler.Java:615)
            at Android.os.Handler.dispatchMessage(Handler.Java:92)
            at Android.os.Looper.loop(Looper.Java:137)
            at Android.app.ActivityThread.main(ActivityThread.Java:4745)
            at Java.lang.reflect.Method.invokeNative(Native Method)
            at Java.lang.reflect.Method.invoke(Method.Java:511)
            at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:786)
            at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)
            at dalvik.system.NativeStart.main(Native Method)

UnfoldableDetailsFragment 89 = 

public void openDetails(View coverView, Painting painting) {
    ImageView image = (ImageView) coverView.findViewById(R.id.details_image);
    TextView title = (TextView) coverView.findViewById(R.id.details_title);
    TextView description = (TextView) coverView.findViewById(R.id.details_text);

    Picasso.with(getActivity()).load(painting.getImageId()).into(image); ->89. LINE
    Log.i("bilgi", "basildi");

    title.setText(painting.getTitle());

    SpannableBuilder builder = new SpannableBuilder(getActivity());
    builder
            .createStyle().setFont(Typeface.DEFAULT_BOLD).apply()
            .append(R.string.year).append(": ")
            .clearStyle()
            .append(painting.getYear()).append("\n")
            .createStyle().setFont(Typeface.DEFAULT_BOLD).apply()
            .append(R.string.location).append(": ")
            .clearStyle()
            .append(painting.getLocation());
    description.setText(builder.build());

    mUnfoldableView.unfold(coverView, mDetailsLayout);
}

PaintingAdapter:

public class PaintingsAdapter extends ItemsAdapter<Painting> implements View.OnClickListener {

public PaintingsAdapter(Context context) {
    super(context);
    setItemsList(Arrays.asList(Painting.getAllPaintings(context.getResources())));
}

@Override
protected View createView(Painting item, int pos, ViewGroup parent, LayoutInflater inflater) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
    ViewHolder vh = new ViewHolder();
    vh.image = Views.find(view, R.id.list_item_image);
    vh.image.setOnClickListener(this);
    vh.title = Views.find(view, R.id.list_item_title);
    view.setTag(vh);

    return view;
}

@Override
protected void bindView(Painting item, int pos, View convertView) {
    ViewHolder vh = (ViewHolder) convertView.getTag();

    vh.image.setTag(item);
    Picasso.with(convertView.getContext()).load(item.getImageId()).noFade().into(vh.image);
    vh.title.setText(item.getTitle());
}

@Override
public void onClick(View view) {
    //Log.i("bilgi", "basildi");
    UnfoldableDetailsFragment fm = new UnfoldableDetailsFragment();
    fm.openDetails(view, (Painting)view.getTag()); -->HERE IS 52. line
    Log.i("bilgi", "basildi");

}

private static class ViewHolder {
    ImageView image;
    TextView title;
}

}

12
Zafer Celaloglu

image est la cible passée à into. C'est ce qui est null.

Assurez-vous que vos identifiants de présentation sont corrects pour toutes les configurations et spécifiez @+id/details_image.

36
Jake Wharton

assurez-vous de gonfler le code xml correct C'était mon problème puisque j'ai copié un adaptateur déjà existant et que j'ai oublié de le changer.

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(context)
            .inflate(R.layout.list_item_subcategories, parent, false);

Où la mise en page que j'aurais dû mettre était list_item_categories

5
Jaad Chacra

Je sais que c'est un peu vieux, mais une chose sur laquelle je viens de passer beaucoup de temps, c'est d'oublier d'exécuter "setContentView" sur la mise en page sur laquelle l'image était. 

ImageView sera nul jusqu'à ce que la disposition principale sur laquelle il se trouve soit gonflée;)

0
Dwebtron

Peut-être que painting.getImageId () est vide ou nul?

Ou image ou getActivity ()? :)

0