0

I am using Recyclerview and Recyclerview adapter generate the null pointer exception .I had tried many things,but i cannot understand the reason.The error say The function getitem count () in Recylcerview adapter is returning null value. Following is My activity code.

package com.example.builderpro;


public class   project_list extends AppCompatActivity  {
MyViewModel myViewModel;
 List<Dproject>  myprojectlist;
Toolbar toolbar;
RecyclerView recyclerView;




@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode== KeyEvent.KEYCODE_BACK) {
        return false;
    }
    return super.onKeyDown(keyCode, event);
}
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_project_list);

        toolbar=(Toolbar)findViewById(R.id.custom_toolbar);
        recyclerView=(RecyclerView)findViewById(R.id.recycler_view);


    setSupportActionBar(toolbar);


    RecyclerView.LayoutManager layoutManager= new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(layoutManager);

    final MyAdaptor myAdaptor=new MyAdaptor();
    recyclerView.setAdapter(myAdaptor);
    final   int sid= getIntent().getIntExtra("supervisor_id",0);


    myViewModel= ViewModelProviders.of(this).get(MyViewModel.class);
    myViewModel.GetAllProject().observe(this, new Observer<List<Dproject>>() {
        @Override
        public void onChanged(List<Dproject> dprojects) {

            myAdaptor.setproject(dprojects);



         }
     });






    }
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {

     getMenuInflater().inflate(R.menu.logout_menu,menu);

      return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    if(item.getItemId()==R.id.logout)
    {
        SharedPreferences preferences= getSharedPreferences("checkbox",MODE_PRIVATE);
        SharedPreferences.Editor editor= preferences.edit();
        editor.putString("remember","false");
        editor.apply();
        finish();

    }
    return super.onOptionsItemSelected(item);
    }
    }

Following is my Adapter code

package com.example.builderpro;


public class MyAdaptor extends RecyclerView.Adapter<MyAdaptor.projectViewHolder>{
private Context context;
private List<Dproject>  myprojectlist;
int Position;

public MyAdaptor() {
}

public MyAdaptor(Context context, List<Dproject> myprojectlist) {
    this.context = context;
    this.myprojectlist = myprojectlist;

}

class   projectViewHolder extends RecyclerView.ViewHolder
{
    ImageView imageView,imageView2;
    TextView title,discription,address;
    Button Button1,Button2;



    public projectViewHolder(View itemView) {
        super(itemView);
        imageView=itemView.findViewById(R.id.Project_Image);
        title=itemView.findViewById(R.id.Project_Title);
        address=itemView.findViewById(R.id.project_address);
        discription=itemView.findViewById(R.id.project_dis);
        Button1=itemView.findViewById(R.id.activity_button);
        Button2=itemView.findViewById(R.id.labour_button);
        imageView2=itemView.findViewById(R.id.card_back);





    }
    }


    @Override
    public projectViewHolder onCreateViewHolder( ViewGroup parent, int viewType) {
    View mview= LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview,parent,false);

    return new projectViewHolder(mview);
    }

    @Override
    public void onBindViewHolder(projectViewHolder holder, int position) {
    Position=position;
    Dproject current_project= myprojectlist.get(position);
    holder.imageView.setImageResource(R.drawable.projectpic);
    holder.title.setText(current_project.getClient_Name());
    holder.discription.setText(current_project.getProject_Discription());
    holder.address.setText(current_project.getLocation());
    holder.Button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent(context,activity.class);
            context.startActivity(intent);
        }
    });


    }

    @Override
    public int getItemCount()
    {
    return myprojectlist.size();

     }



    public void setproject(List<Dproject> dprojects)
    {
    this.myprojectlist=dprojects;
    notifyDataSetChanged();
    }
    }

These lines are from Logcat

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.builderpro, PID: 21616
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
    at com.example.builderpro.MyAdaptor.getItemCount(MyAdaptor.java:83)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4044)
    at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3534)
    at android.view.View.measure(View.java:19857)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
    at android.view.View.measure(View.java:19857)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
    at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
    at android.view.View.measure(View.java:19857)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)

Please help me because i have been stuck on this error for about 5 days. It is really appreciable.

1 Answers1

0

Try to change your adapter getItemCount() to return 0 items if the list is not yet intialized

@Override
public int getItemCount()
{
  if (myprojectlist != null)
     return myprojectlist.size();
  else 
     return 0;
 }
Zain
  • 37,492
  • 7
  • 60
  • 84
  • it's work .Thanks Man . Im very grateful to you. – Umair Khan Apr 14 '20 at 00:36
  • Can you tell me about question is closed by some user bcz im new on this site. – Umair Khan Apr 14 '20 at 00:42
  • @UmairKhan usually for common questions, like that of you that has NullPointerException which is the most common exception in Java, questions are closed as they are already asked over and over and the reason is the same, which is calling a method on an object that is not initialized yet .. you can check [this](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) out – Zain Apr 14 '20 at 00:45