android - RecyclerView 在到达数据末尾时崩溃

标签 android android-recyclerview

<分区>

我有一个从 Firebase 数据库获取数据的 RecyclerView。当 RecyclerView 到达数据提要的末尾时,应用程序崩溃并显示以下内容:

日志文件:

 09-27 15:30:12.826 30184-30184/com.pctoolmanconsulting.trackmyweight E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                   Process: com.pctoolmanconsulting.trackmyweight, PID: 30184
                                                                                   java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.startsWith(java.lang.String)' on a null object reference
                                                                                       at com.pctoolmanconsulting.trackmyweight.ProgressViewHolder.bind(ProgressViewHolder.java:40)
                                                                                       at com.pctoolmanconsulting.trackmyweight.ProgressAdapter.onBindViewHolder(ProgressAdapter.java:41)
                                                                                       at com.pctoolmanconsulting.trackmyweight.ProgressAdapter.onBindViewHolder(ProgressAdapter.java:15)

我不知道应该在哪里检查空值。在我的 ViewHolder 类或适配器类的绑定(bind)方法中。

有人能帮我指明正确的方向吗?
谢谢。

我的ViewHolder绑定(bind)方法:

public void bind (ImageProgress progress){
  name.setText(progress.name);

  if(progress.progressDetail.startsWith("https://firebasestorage.googleapis.com/") || progress.progressDetail.startsWith("content://")){
    progressDetailMessage.setVisibility(View.INVISIBLE);
    image.setVisibility(View.VISIBLE);
    Glide.with(activity).load(progress.progressDetail).fitCenter().into(image);

  } else {
     progressDetailMessage.setVisibility(View.VISIBLE);
     image.setVisibility(View.GONE);
     progressDetailMessage.setText(progress.progressDetail);
  }
}

适配器类:

public class ProgressAdapter extends RecyclerView.Adapter<ProgressViewHolder> {

  private static final String TAG ="ProgressAdapter";
  private final Activity activity;
  List<ImageProgress> progressDetails = new ArrayList<>();

  public ProgressAdapter(Activity activity){
    this.activity = activity;
  }

  public void addProgress(ImageProgress progress){
    progressDetails.add(progress);
    notifyItemInserted(progressDetails.size());
  }

  @Override
  public ProgressViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    return new ProgressViewHolder(activity, activity.getLayoutInflater().inflate(android.R.layout.two_line_list_item,
            parent, false));
  }

  @Override
  public void onBindViewHolder(ProgressViewHolder holder, int position){
    holder.bind(progressDetails.get(position));
  }

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

最佳答案

就像其他人说的,你应该先检查null。滚动到最后一项时,progressDetail 必须为 null。

让我告诉你如何找出这个:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.startsWith(java.lang.String)' on a null object reference

看到错误说的是'Attempt to invoke virtual method "startsWith"',你可能会想'startsWith'是谁的方法。阅读错误消息后检查您的代码,您会注意到“startsWith”是在对象“progressDetail”上调用的,该对象为空!!

好的,一切都清楚了。您应该检查 null 以避免异常。

但是!!!最重要的是您应该找出为什么它可以为空。

关于android - RecyclerView 在到达数据末尾时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39735824/

相关文章:

java - MySQL 数据未显示在 Android RecyclerView 中(Logcat 错误 : Couldn't load memtrack module)

java - 如何修复仅显示单行的android的回收 View View 问题

android - React Native 中的 RecyclerView : notifyItemInserted() and notifyDataSetChanged() have no effect

android - 单击时将 RecyclerView 项目转换为 CardView

java - 当 GridView 中的文本为 null 或为空时如何显示图像,反之亦然?

android - 为Android应用程序提供多种主题颜色

android - 连接 net.sourceforge.jtds.jdbc.Driver 时出错

java - MenuItems 的图标填充为灰色,因此不显示图像

java - Android Paging Library如何知道加载更多数据?

android - 更改切换按钮 Android 的开/关文本