Atualizar checkbox no banco sqlite

Olá pessoal, estou chegando agora no guj apesar de consultar muitas vezes!
Estou fazendo um checklist pre definido salvo no banco, porem não consigo atualizar o checkbox marcado para o banco de dados. Segue o codigo, fiz o teste de debug que sempre dar erro em uma parte que deixei comentado abaixo, ele ativa uma exceçao. Nao consigo achar uma solucao que funcione no meu código. Agredeço desde ja a todos!

  public class MainActivity extends AppCompatActivity {

 EditText codigoTarefa;
 Button btnSalvar;
 CheckBox tarefaChBox;
 TextView nomeTarefa;
 ListView listTarefas;
 BancoDados db = new BancoDados(this);
Tarefa t = new Tarefa();

  @Override
   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

codigoTarefa = findViewById(R.id.codigoTarefa);
btnSalvar = findViewById(R.id.btnSalvar);
tarefaChBox = findViewById(R.id.tarefaChBox);
nomeTarefa = findViewById(R.id.nomeTarefa);

if (db.listaTodasTarefas().size() == 0) {
    db.addTarefa(new Tarefa("Tarefa1", 0));
    db.addTarefa(new Tarefa("Tarefa2", 0));
    db.addTarefa(new Tarefa("Tarefa3", 0));
}

btnSalvar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        /**Esta parte é que esta dando erro quando chega aqui
        nao continua depois daqui**/
        Boolean checkTarefa = tarefaChBox.isChecked();
        for (int i = 0; i <= 3; i++) {
            t = db.selecionarTarefa(i);

            /**Caso o checkbox seja marcado como ele 
            atualiza o banco preenchendo banco para 1**/
            if (checkTarefa.booleanValue() == true) {
                db.atualizaTarefa(new Tarefa(i, t.getNometarefa(), 1));

            } else {
                db.atualizaTarefa(new Tarefa(i, t.getNometarefa(), 0));
            }

        }
    }
});

listTarefas = findViewById(R.id.listaTarefa);
ArrayAdapter adapter = new TarefaAdapter(this, listarTarefas());
listTarefas.setAdapter(adapter);

  private ArrayList<Tarefa> listarTarefas() {
    ArrayList<Tarefa> tarefas = new ArrayList<Tarefa>();

    for (int i = 1; i <= 3; i++) {
        t = db.selecionarTarefa(i);
        //Exibir tarefas no listView
        tarefas.add(new Tarefa(t.getNometarefa(), t.getTarefa()));
    }

    return tarefas;
}

}

Poste a exceção

A exceção é esta A linha 59 é da variavel boolean checkTarefa que deveria receber true ou false:

02-13 14:20:42.768 1463-1463/com.example.android.onlytest2 E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.android.onlytest2.MainActivity$1.onClick(MainActivity.java:59)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

Estranho cara, substitua a linha do erro por isso boolean checkTarefa = tarefaChBox.isChecked();

Acontece o mesmo erro com a mesma exceçao. É que o seguinte estou usando um array adapter para exibiçao personalizada, mas por enquanto estou usando textview e checkbox e estou montando uma lista com isso. Porém quando usuario clica no checkbox eu nao consigo que na classe Main enxerga isso! Vou colocar aqui minha classe TarefaAdapter, acredito que ta faltando alguma coisa mas nao sei o que é:

    public class TarefaAdapter extends ArrayAdapter<Tarefa> {
        Context context;
           ArrayList<Tarefa> tasks;


public TarefaAdapter(Context context, ArrayList<Tarefa> tasks) {
    super(context, R.layout.tarefa, tasks);
    this.context = context;
    this.tasks = tasks;
}

public View getView(final int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.tarefa, parent, false);
    final TextView nomeTarefa = rowView.findViewById(R.id.nomeTarefa);
    final CheckBox tarefaChBox = rowView.findViewById(R.id.tarefaChBox);

    nomeTarefa.setText(tasks.get(position).getNometarefa());

    if (tarefaChBox.isChecked()) {

     tasks.get(position).getTarefa();

     }


    return rowView;

}

}

Peço para fechar este tópico!