【问题标题】:Picasso IllegalArgumentException Target must not be nullPicasso IllegalArgumentException 目标不能为空
【发布时间】:2015-01-03 14:22:23
【问题描述】:

我正在尝试在我的项目中使用 Picasso 库来设置图像。

当我单击视图的图像时,我在执行毕加索时遇到错误。

应用程序的Logcat

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

绘画适配器:

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

}

【问题讨论】:

  • 您是否能够解决问题,有哪些建议?因为我有同样的问题..

标签: android picasso


【解决方案1】:

image 是传递给into 的目标。这就是null

确保您的布局 ID 对于所有配置都是正确的,并指定 @+id/details_image

【讨论】:

  • yeap 图像返回 null 但所有配置都正确
【解决方案2】:

确保你膨胀了正确的 xml 那是我的问题,因为我复制了一个已经存在的适配器并忘记更改它

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

我应该把布局放在哪里是 list_item_categories

【讨论】:

    【解决方案3】:

    我知道这有点老了,但我花了很多时间做的一件事是忘记对图像所在的布局运行“setContentView”。

    ImageView 将是空的,直到它所在的主布局被膨胀;)

    【讨论】:

      【解决方案4】:

      检查你的 imageview 对象的 ID 是否正确 -

      imageView=itemView.findViewById(R.id.imageview1);
      

      【讨论】:

        【解决方案5】:

        也许 painting.getImageId() 为空或 null?

        还是 image 或 getActivity()? :)

        【讨论】:

        • 最初的实现是在 Activity 我把它转换成 Fragment 所以我从 @Override public void onClick(View view) { if (view.getContext() instanceof UnfoldableDetailsActivity) 改变了一点适配器 onClick 方法{ UnfoldableDetailsActivity 活动 = (UnfoldableDetailsActivity) view.getContext(); activity.openDetails(view, (Painting) view.getTag()); } }
        【解决方案6】:

        检查您在布局文件中设置的 ID。

        android:id="@+id/details_image"
        
        

        那么,

         ImageView image = (ImageView) coverView.findViewById(R.id.details_image);
        

        【讨论】:

          猜你喜欢
          • 2019-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多