Click here to Skip to main content
15,901,373 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
package com.example.todoapp.adapter;

import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.todoapp.AddNewTask;
import com.example.todoapp.MainActivity;
import com.example.todoapp.R;
import com.example.todoapp.model.Model;
import com.example.todoapp.utils.databasehelper;

import java.util.List;


public class myadapter extends RecyclerView.Adapter<myadapter.myviewholder> {
    private List<Model> mList=null;
    private MainActivity mainActivity;
    private databasehelper mdb;



    public myadapter(databasehelper dbh, MainActivity mainActivity) {
        this.mainActivity=mainActivity;
        this.mdb=mdb;
    }

    @NonNull
    @Override
    public myviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.taskinterface,parent,false);
        return new myviewholder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull myviewholder holder, int position) {
        final Model item=mList.get(position);
        holder.checkBox.setText(item.getTask());
        holder.checkBox.setChecked(toboolean(item.getStatus()));
        holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if(compoundButton.isChecked()){
                    mdb.updatestatus(item.getId(),1);

                }
                else {
                    mdb.updatestatus(item.getId(),0);
                }
            }
        });

    }
    public boolean toboolean(int num){
        return num!=0;
    }
    public Context context(){
        return mainActivity;
    }
    public void settask(List<Model> mList){
        this.mList=mList;
        notifyDataSetChanged();
    }
    public void deletetask(int position){
        Model item=mList.get(position);
        mdb.deleteTask(item.getId());
        mList.remove(position);
        notifyItemRemoved(position);
    }
    public void edittask(int position){
        Model item=mList.get(position);

        Bundle bundle=new Bundle();
        bundle.putInt("id",item.getId());
        bundle.putString("task",item.getTask());
        AddNewTask addNewTask=new AddNewTask();
        addNewTask.setArguments(bundle);
        addNewTask.show(mainActivity.getSupportFragmentManager(),addNewTask.getTag());

    }

    @Override
    public int getItemCount() {
        if(mList==null){
            Log.e("error","error");
        }

            return mList.size();
    }

    public class myviewholder extends RecyclerView.ViewHolder{
        CheckBox checkBox;

        public myviewholder(@NonNull View itemView) {
            super(itemView);
            checkBox=itemView.findViewById(R.id.mcheckbox);
        }
    }
}


What I have tried:

i m getting null pointer exception,showing mlist is not initialised(may be)
Posted
Comments
David Crow 6-May-24 16:23pm    
At what point do you initialize mList? There is an assignment in settask(), but is that method ever called?
BHAVYA NAINESHKUMAR FULWALA 8-May-24 7:42am    
ijust not initialised mList properly...Thanks

You check mlist to see if it's null then log this. If it's null, you have no guard around the size because you just log that there's a null entry and continue processing as per normal. Try something like this.
Java
if (mlist == null) {
  log.error("....");
  return 0;
}
return mlist.size();
 
Share this answer
 
To add to what Pete has said ... This is one of the most common problems we get asked, and it's also the one we are least equipped to answer, but you are most equipped to answer yourself.

Let me just explain what the error means: You have tried to use a variable, property, or a method return value but it contains null - which means that there is no instance of a class in the variable.
It's a bit like a pocket: you have a pocket in your shirt, which you use to hold a pen. If you reach into the pocket and find there isn't a pen there, you can't sign your name on a piece of paper - and you will get very funny looks if you try! The empty pocket is giving you a null value (no pen here!) so you can't do anything that you would normally do once you retrieved your pen. Why is it empty? That's the question - it may be that you forgot to pick up your pen when you left the house this morning, or possibly you left the pen in the pocket of yesterday's shirt when you took it off last night.

We can't tell, because we weren't there, and even more importantly, we can't even see your shirt, much less what is in the pocket!

Back to computers, and you have done the same thing, somehow - and we can't see your code, much less run it and find out what contains null when it shouldn't.
But you can - and Visual Studio will help you here. Run your program in the debugger and when it fails, it will show you the line it found the problem on. You can then start looking at the various parts of it to see what value is null and start looking back through your code to find out why. So put a breakpoint at the beginning of the method containing the error line, and run your program from the start again. This time, the debugger will stop before the error, and let you examine what is going on by stepping through the code looking at your values.

But we can't do that - we don't have your code, we don't know how to use it if we did have it, we don't have your data. So try it - and see how much information you can find out!
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900