Android RecyclerView在到达数据末尾时崩溃

Android RecyclerView在到达数据末尾时崩溃,android,android-recyclerview,Android,Android Recyclerview,我有一个从Firebase数据库获取数据的回收视图。当RecyclerView到达数据馈送的末尾时,应用程序崩溃,原因如下: 日志文件: 09-27 15:30:12.826 30184-30184/com.pctoolmanconsulting.trackmyweight E/AndroidRuntime: FATAL EXCEPTION: main

我有一个从Firebase数据库获取数据的回收视图。当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)
我不知道应该在哪里检查空值。在myViewHolder类的bind方法中或在adapter类中

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

我的视图持有者绑定方法:

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();
  }
}
公共类ProgressAdapter扩展了RecyclerView.Adapter{
私有静态最终字符串标记=“ProgressAdapter”;
私人最终活动;
List progressDetails=new ArrayList();
公共ProgressAdapter(活动){
这个。活动=活动;
}
public void addProgress(图像进度){
progressDetails.add(进度);
notifyItemInserted(progressDetails.size());
}
@凌驾
public ProgressViewHolder onCreateViewHolder(视图组父级,int-viewType){
返回新的ProgressViewHolder(activity,activity.GetLayoutFlater()。充气(android.R.layout.two\u line\u list\u项,
父母,假);
}
@凌驾
BindViewHolder上的公共无效(ProgressViewHolder,内部位置){
holder.bind(progressDetails.get(position));
}
@凌驾
public int getItemCount(){
返回progressDetails.size();
}
}

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

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

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.startsWith(java.lang.String)' on a null object reference
看到错误所说的是“尝试调用虚拟方法”startsWith“,您可能会认为“startsWith”是谁的方法。阅读错误消息后检查代码,您会注意到对空的对象“progressDetail”调用了“startsWith”

好的,一切正常。您应该检查null以避免异常


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

你需要检查空值,因为它看起来像空值。我在哪里检查空值?这就是我需要的帮助。progressdetail似乎为空。在调用startsWith方法之前检查它是否为null ProgressViewHolder.java的第40行是什么?将其标记为重复显然是错误的,这是一种攻击而不是答案