2014-11-06 33 views
9

Ich versuche, Bild mithilfe von Picasso-Bibliothek auf meinem Projekt festzulegen.Picasso IllegalArgumentException Ziel muss nicht null sein

Wenn ich auf Bild der Ansicht klicke, erhalte ich einen Fehler bei der Ausführung von Picasso.

Logcat der App

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

}

Antwort

27

image ist das Ziel an into übergeben. Es ist was ist null. Stellen Sie sicher, dass Ihre Layout-IDs für alle Konfigurationen korrekt sind, und geben Sie @+id/details_image an.

+0

yeap Bild gibt null zurück, aber alle Konfiguration ist korrekt –

+0

Machen Sie gute Arbeit. – VVB

0

Vielleicht painting.getImageId() leer oder null?

Oder Bild oder getActivity()? :)

+0

die ursprüngliche Implementierung war auf Aktivität war ich es umgewandelt Fragment also habe ich ein wenig auf Adapter onClick Methode von @Override public void onClick (Ansicht anzeigen) { if (view.getContext() instanceof UnfoldableDetailsActivity) { UnfoldableDetailsActivity-Aktivität = (UnfoldableDetailsActivity) view.getContext(); activity.openDetails (view, (Painting) view.getTag()); } } –

0

Ich weiß, dass dies ein bisschen alt ist, aber eine Sache, die ich gerade einige Zeit verbrachte, ist zu vergessen, "setContentView" auf das Layout zu laufen, auf dem das Bild war.

Der Image null sein wird, bis das Hauptlayout, das er lebt aufgeblasen;)

3

stellen Sie sicher, die richtigen xml Aufblasen Das ist mein Problem war, da ich einen bereits vorhandenen Adapter kopiert und vergessen zu ändern dass

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

Wo das Layout ich list_item_categories gesetzt haben sollte

Verwandte Themen