Java RecyclerView空指针错误
我很困惑,我需要你的帮助 MyApp启动错误java.lang.NullPointerException:尝试在空对象上调用接口方法“int java.util.List.size()”引用带有片段的RecyclerView和CardView的工作Java RecyclerView空指针错误,java,android,android-recyclerview,nullpointerexception,Java,Android,Android Recyclerview,Nullpointerexception,我很困惑,我需要你的帮助 MyApp启动错误java.lang.NullPointerException:尝试在空对象上调用接口方法“int java.util.List.size()”引用带有片段的RecyclerView和CardView的工作 @Override public int getItemCount() { //ERROR NullPointerException return visitaList.size(); } 整个适配器Java代码 公共类Visit
@Override
public int getItemCount()
{
//ERROR NullPointerException
return visitaList.size();
}
整个适配器Java代码
公共类VisitaAdapter扩展了RecyclerView.Adapter{
private Context context;
private List<Visita> visitaList;
public VisitaAdapter(Context ctx, List<Visita> visitaList){
this.context = ctx;
this.visitaList= visitaList;
}
@Override
public VisitaViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
//inflating and return our view holder
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.layout_visita, null);
return new VisitaViewHolder(view);
}
@Override
public void onBindViewHolder(VisitaViewHolder holder, int position) {
//getting the product of the specific position
Visita visita =visitaList.get(position);
//binding data with the viewholder
holder.textViewEmpresa.setText(visita.getTitle_empresa());
holder.textViewMision.setText(visita.getMision());
holder.textViewFecha.setText(visita.getFecha());
holder.imageView.setImageDrawable(context.getResources()
.getDrawable(visita.getImage()));
}
@Override
public int getItemCount()
{
//ERROR NullPointerException
return visitaList.size();
}
class VisitaViewHolder extends RecyclerView.ViewHolder {
TextView textViewEmpresa, textViewMision, textViewFecha;
ImageView imageView;
public VisitaViewHolder(View itemView) {
super(itemView);
textViewEmpresa = itemView.findViewById(R.id.textViewEmpresa);
textViewMision = itemView.findViewById(R.id.textViewMision);
textViewFecha = itemView.findViewById(R.id.textViewFecha);
imageView = itemView.findViewById(R.id.imageView);
}
}
私有上下文;
私人名单探视者;
公共VisitaAdapter(上下文ctx、列表visitaList){
this.context=ctx;
this.visitaList=visitaList;
}
@凌驾
public VisitaViewHolder onCreateViewHolder(视图组父级,int-viewType){
//充气并返回视图保持架
LayoutFlater充气机=LayoutFlater.from(上下文);
视图=充气机。充气(R.layout.layout\u visita,空);
返回新的VisitaViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(VisitaViewHolder,内部位置){
//获取特定位置的产品
Visita Visita=visitaList.get(位置);
//使用viewholder绑定数据
holder.textViewEmpresa.setText(visita.getTitle_empresa());
holder.textViewMision.setText(visita.getMision());
holder.textViewFecha.setText(visita.getFecha());
holder.imageView.setImageDrawable(context.getResources()
.getDrawable(visita.getImage());
}
@凌驾
public int getItemCount()
{
//错误NullPointerException
返回visitaList.size();
}
类VisitaViewHolder扩展了RecyclerView.ViewHolder{
TextView textViewEmpresa、textViewMision、textViewFecha;
图像视图图像视图;
公众访问视图持有者(查看项目视图){
超级(项目视图);
textViewEmpresa=itemView.findViewById(R.id.textViewEmpresa);
textViewMision=itemView.findViewById(R.id.textViewMision);
textViewFecha=itemView.findViewById(R.id.textViewFecha);
imageView=itemView.findViewById(R.id.imageView);
}
}
}
片段启动回收视图
public class ReplantFrag extends Fragment {
//Adding to the list all items
List<Visita> visitaList;
//The Recycler view
RecyclerView recyclerView;
public ReplantFrag() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_replanta, container, false);
//getting the recyclerview from xml
recyclerView = (RecyclerView) view.findViewById(R.id.reciclerview);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
VisitaAdapter adapter = new VisitaAdapter(getActivity(), visitaList);
recyclerView.setAdapter(adapter);
//agregar items a la maqueta Recycler+CardView
List<Visita> visitaList = new ArrayList<>();
//adding items in list
visitaList.add(new Visita(
1,
"ARAUCO S.A.",
"Revisión Caldera",
"20-01-2018",
R.drawable.arauco_logo));
visitaList.add(new Visita(
2,
"ARAUCO S.A.",
"Inspeccion Nariz Toro",
"22-01-2018",
R.drawable.arauco_logo));
visitaList.add(new Visita(
3,
"COLBUN S.A.",
"Revisión Tuberias",
"25-01-2018",
R.drawable.colbun_logo));
return view;
}
公共类replantrag扩展片段{
//将所有项目添加到列表中
列出访客名单;
//回收者观点
回收视图回收视图;
公共文件{
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u replanta,container,false);
//从xml获取recyclerview
recyclerView=(recyclerView)view.findViewById(R.id.reciclerview);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getActivity());
VisitaAdapter=新的VisitaAdapter(getActivity(),visitaList);
recyclerView.setAdapter(适配器);
//agregar项目a la maqueta回收商+CardView
List visitaList=new ArrayList();
//在列表中添加项目
visitaList.add(新访问)(
1.
“ARAUCO S.A.”,
“修正火山口”,
"20-01-2018",
R.drawable.arauco_标志);
visitaList.add(新访问)(
2.
“ARAUCO S.A.”,
“Nariz Toro专家”,
"22-01-2018",
R.drawable.arauco_标志);
visitaList.add(新访问)(
3.
“COLBUN S.A.”,
“结节病回顾”,
"25-01-2018",
R.可拉拔的colbun_标志);
返回视图;
}
}
谢谢你,伙计 首先创建
visitaList
对象,然后像这样设置适配器
visitaList = new ArrayList<>();
VisitaAdapter adapter = new VisitaAdapter(getActivity(), visitaList);
recyclerView.setAdapter(adapter);
//adding items in list
visitaList.add(new Visita(
1,
"ARAUCO S.A.",
"Revisión Caldera",
"20-01-2018",
R.drawable.arauco_logo));
visitaList.add(new Visita(
2,
"ARAUCO S.A.",
"Inspeccion Nariz Toro",
"22-01-2018",
R.drawable.arauco_logo));
visitaList.add(new Visita(
3,
"COLBUN S.A.",
"Revisión Tuberias",
"25-01-2018",
R.drawable.colbun_logo));
adapter.notifydatasetchanged();
return view;
visitaList=newarraylist();
VisitaAdapter=新的VisitaAdapter(getActivity(),visitaList);
recyclerView.setAdapter(适配器);
//在列表中添加项目
visitaList.add(新访问)(
1.
“ARAUCO S.A.”,
“修正火山口”,
"20-01-2018",
R.drawable.arauco_标志);
visitaList.add(新访问)(
2.
“ARAUCO S.A.”,
“Nariz Toro专家”,
"22-01-2018",
R.drawable.arauco_标志);
visitaList.add(新访问)(
3.
“COLBUN S.A.”,
“结节病回顾”,
"25-01-2018",
R.可拉拔的colbun_标志);
adapter.notifydatasetchanged();
返回视图;
在访问列表中添加项目后,只需初始化适配器即可。这应该做得很好
List<Visita> visitaList = new ArrayList<>();
//adding items in list
visitaList.add(new Visita(
1,
"ARAUCO S.A.",
"Revisión Caldera",
"20-01-2018",
R.drawable.arauco_logo));
visitaList.add(new Visita(
2,
"ARAUCO S.A.",
"Inspeccion Nariz Toro",
"22-01-2018",
R.drawable.arauco_logo));
visitaList.add(new Visita(
3,
"COLBUN S.A.",
"Revisión Tuberias",
"25-01-2018",
R.drawable.colbun_logo));
//Now that your list is setup you wont have a null list going into your adapter.
VisitaAdapter adapter = new VisitaAdapter(getActivity(), visitaList);
recyclerView.setAdapter(adapter);
return view;
List visitaList=new ArrayList();
//在列表中添加项目
visitaList.add(新访问)(
1.
“ARAUCO S.A.”,
“修正火山口”,
"20-01-2018",
R.drawable.arauco_标志);
visitaList.add(新访问)(
2.
“ARAUCO S.A.”,
“Nariz Toro专家”,
"22-01-2018",
R.drawable.arauco_标志);
visitaList.add(新访问)(
3.
“COLBUN S.A.”,
“结节病回顾”,
"25-01-2018",
R.可拉拔的colbun_标志);
//现在列表已经设置好,适配器中就不会有空列表。
VisitaAdapter=新的VisitaAdapter(getActivity(),visitaList);
recyclerView.setAdapter(适配器);
返回视图;
您的问题是将Null传递给适配器
此行列表访问列表代码>被称为声明“visitaList为null”
此行visitaList=newarraylist()代码>称为创建
除非您创建一个对象或为其分配一个引用,否则为空
所以你有两个选择
1-创建列表并在传递到适配器之前对其进行初始化
2-或者使用new ArrayList()
创建它并将其传递给适配器,在这种情况下,您必须告诉适配器列表有一些更改(这是您的初始化)。因此调用adapter.notifydatasetchanged()代码>嗨,Ignacio,您需要缩小问题的范围(并展示您自己调试它所做的工作)。期望别人调试你的代码是不公平的。不幸的是,那是你的工作。是你写的!:)解决方案准备好了,谢谢!