Пикассо не загружается в андроид студии - PullRequest
0 голосов
/ 16 февраля 2019

Я получаю NPE, когда хочу показать фотографии в Picasso, обратите внимание, что у меня есть другой адаптер, который я использовал в Picasso, но в моем новом адаптере возникает ошибка npe для логического значения, и мои друзья использовали этот код, и он работал хорошоВот код, в котором говорится об ошибке:

public boolean isVideoNews() {
    return !image.isEmpty() && !video.isEmpty() ;
}

и часть, связанная с этим кодом в моем адаптере

videoIndicator.setVisibility(news.isVideoNews() ? View.VISIBLE : View.GONE);

мой адаптер

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder> {
private List<News> newsList;

public NewsAdapter(List<News> newsList) {
    this.newsList = newsList;
}

@Override
public NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new NewsViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_news, parent, false));
}

@Override
public void onBindViewHolder(NewsViewHolder holder, int position) {
    holder.bindNews(newsList.get(position));
}

@Override
public int getItemCount() {
    return newsList.size();
}


class NewsViewHolder extends RecyclerView.ViewHolder {
    private ImageView newsImageView;
    private TextView titleTextView;
    private TextView dateTextView;
    private View videoIndicator;

    public NewsViewHolder(View itemView) {
        super(itemView);
        newsImageView = itemView.findViewById(R.id.iv_news_image);
        videoIndicator = itemView.findViewById(R.id.iv_news_VideoIndicator);
        titleTextView = itemView.findViewById(R.id.tv_news_title);
        dateTextView = itemView.findViewById(R.id.tv_news_date);
    }

    public void bindNews(News news) {
        Picasso.get().load(news.getImage()).into(newsImageView);
        videoIndicator.setVisibility(news.isVideoNews() ? View.VISIBLE : View.GONE);
        titleTextView.setText(news.getTitle());
        dateTextView.setText(news.getDate());
    }
}
}

иэто моя модель данных

public class News {
private int id;
private String title;
private String content;
private String date;
private String image;
private String video;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getContent() {
    return content;
}

public void setContent(String content) {
    this.content = content;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public String getImage() {
    return image;
}

public void setImage(String image) {
    this.image = image;
}

public String getVideo() {
    return video;
}

public void setVideo(String video) {
    this.video = video;
}

public boolean isVideoNews() {
    return !image.isEmpty() && !video.isEmpty() ;
}
}

Ошибка

 FATAL EXCEPTION: main
Process: com.example.melal.newsapp, PID: 5958
java.lang.IllegalArgumentException: Path must not be empty.
    at com.squareup.picasso.Picasso.load(Picasso.java:332)
    at com.example.melal.newsapp.home.NewsAdapter$NewsViewHolder.bindNews(NewsAdapter.java:53)
    at com.example.melal.newsapp.home.NewsAdapter.onBindViewHolder(NewsAdapter.java:31)
    at com.example.melal.newsapp.home.NewsAdapter.onBindViewHolder(NewsAdapter.java:17)
FATAL EXCEPTION: main
Process: com.example.melal.newsapp, PID: 9523
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference
    at com.example.melal.newsapp.data.News.isVideoNews(News.java:60)
    at com.example.melal.newsapp.home.NewsAdapter$NewsViewHolder.bindNews(NewsAdapter.java:53)
    at com.example.melal.newsapp.home.NewsAdapter.onBindViewHolder(NewsAdapter.java:30)
    at com.example.melal.newsapp.home.NewsAdapter.onBindViewHolder(NewsAdapter.java:16)

Я получаю все данные при отладке, тексты и заголовки, а также все, что отображается в пользовательском интерфейсе, но только мое изображение не отображается,мои баннеры рис показывают в моем другом адаптере на интерфейсе пользователя, но главная проблема - это адаптер, о котором я сказал,

, пожалуйста, помогите мне

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Вам необходимо предоставить разделенное имя и предоставить это поле класса Model, чтобы ваш gson мог его проанализировать.В настоящее время вы не установили его для какого-либо поля, поэтому GSON не анализирует ваш ответ соответствующим образом.Ниже приведен пример кода для определения его в классе.Вы должны выставить все свои поля класса соответственно.

@SerializedName("foo")      //name inside quotes must match with your json field name.
@Expose
private String foo;
0 голосов
/ 16 февраля 2019

Вы должны проверить здесь нулевые и пустые значения для пути к изображению.

Поместите следующую строку, если условие вроде:

if(TextUtils.isEmpty(news.getImage())) {
   // Load default image
   newsImageView.setImageResource(R.drawable.placeholder);
} else {
    Picasso.get().load(news.getImage()).into(newsImageView);
}

Надеюсь, оно будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...