Ответ 1
image
- это цель, переданная в into
. Это то, что null
.
Убедитесь, что ваши идентификаторы макета верны для всех конфигураций и укажите @+id/details_image
.
Я пытаюсь установить изображение, используя библиотеку Picasso в моем проекте.
Когда я нажимаю образ представления, я получаю сообщение об ошибке при выполнении 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);
}
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
- это цель, переданная в into
. Это то, что null
.
Убедитесь, что ваши идентификаторы макета верны для всех конфигураций и укажите @+id/details_image
.
убедитесь, что вы раздуваете правильный 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
Может быть, paint.getImageId() пуст или null?
Или изображение или getActivity()?:)
Я знаю, что это немного старо, но одна вещь, на которую я только что потратила кучу времени, - это забыть запустить "setContentView" в макете, в которой было изображение.
ImageView будет иметь значение null до тех пор, пока основной макет, в котором он живет, не накапливается;)
Проверьте правильность идентификатора вашего объекта.
imageView=itemView.findViewById(R.id.imageview1);
Проверьте идентификатор, который вы установили в файле макета.
android:id="@+id/details_image"
Затем
ImageView image = (ImageView) coverView.findViewById(R.id.details_image);