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;
}
}
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
.
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
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;)
Peut-être que painting.getImageId () est vide ou nul?
Ou image ou getActivity ()? :)