web-dev-qa-db-ja.com

Picasso IllegalArgumentExceptionターゲットはnullにできません

私のプロジェクトでピカソライブラリを使用して画像を設定しようとしています。

ビューの画像をクリックすると、ピカソの実行でエラーが発生します。

アプリの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);
}

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

}

15
Zafer Celaloglu

imageintoに渡されるターゲットです。それがnullです。

レイアウトIDがすべての構成に対して正しいことを確認し、@+id/details_imageを指定します。

40
Jake Wharton

正しい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でした

6
Jaad Chacra

これは少し古いことを知っていますが、たくさんの時間を費やしたばかりのことの1つは、画像が配置されていたレイアウトに対して「setContentView」を実行するのを忘れていることです。

ImageViewは、それが存在するメインレイアウトがインフレートされるまでnullになります;)

0
Dwebtron

レイアウトファイルで設定したIDを確認します。

Android:id="@+id/details_image"

そして、

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

ImageviewオブジェクトのIDが正しいことを確認します-

imageView=itemView.findViewById(R.id.imageview1);
0
Raj Godara

たぶんpainting.getImageId()は空またはnullですか?

または画像またはgetActivity()? :)

0