Android RecyclerView在到达数据末尾时崩溃
我有一个从Firebase数据库获取数据的回收视图。当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
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行是什么?将其标记为重复显然是错误的,这是一种攻击而不是答案