Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RecyclerView空指针错误_Java_Android_Android Recyclerview_Nullpointerexception - Fatal编程技术网

Java RecyclerView空指针错误

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

我很困惑,我需要你的帮助

MyApp启动错误java.lang.NullPointerException:尝试在空对象上调用接口方法“int java.util.List.size()”引用带有片段的RecyclerView和CardView的工作

 @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,您需要缩小问题的范围(并展示您自己调试它所做的工作)。期望别人调试你的代码是不公平的。不幸的是,那是你的工作。是你写的!:)解决方案准备好了,谢谢!