-3

i'm confused i need your help developers!

MyApp launch ERROR java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference a work with RecyclerView and CardView with a Fragment.

 @Override
public int getItemCount()
{
    //ERROR NullPointerException
   return visitaList.size();

}

Entire Adapter Java Code

public class VisitaAdapter extends 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);

    }
}

}

Fragment launch the recyclerview

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;
}

}

Thanks Mate!!

Ignacio_aa
  • 318
  • 2
  • 8

3 Answers3

0

Make visitaList object first and then set adapter like this way

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;
Munir
  • 2,548
  • 1
  • 11
  • 20
0

You just need to initialize your adapter after you add items in your visitaList. This should do perfectly.

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;
Aalap Patel
  • 2,058
  • 2
  • 17
  • 31
0

your problem is that you are passing a Null to the adapter.

this line List<Visita> visitaList ; is called declaration "visitaList is null".

this line visitaList = new ArrayList<>(); is called creation.

unless you create an object or assign a reference to it.it's Null.

so you have two options

1- create the list and initialize it before passing to the adapter.

2-or create it using new ArrayList<>() and pass it to the adapter, then in this case you have to tell the adapter that there is some change to the list (which is your initialization). so you call adapter.notifydatasetchanged();

Bishoy Kamel
  • 2,327
  • 2
  • 17
  • 29