Não está recuperando : model.Usuario.getDespesaTotal() - Poderiam me Orientar Por Favor

Boa Tarde! estou com uma dificuldade pois meu LogCat está apresentando o seguinte erro :

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Double model.Usuario.getDespesaTotal()' on a null object reference

não estou entendendo pois pra mim faz sentido … segue meu codigo abaixo:

Despesa.Activity

package com.novoandroid.organizze.activity;
 
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
 
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
 
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import com.novoandroid.organizze.R;
 
import config.ConfiguracaoFirebase;
import helper.Base64Custom;
import helper.DataCustom;
import model.Movimentacao;
import model.Usuario;
 
 
public class DespesaActivity extends AppCompatActivity {
 
    private TextInputEditText editData;
    private TextInputEditText editCategoria;
    private TextInputEditText editSalarioMensal;
    private TextInputEditText editDescricao;
    private EditText editValor;
    private DatabaseReference firebaseRef = ConfiguracaoFirebase.getFirebaseDataBase();
    private FirebaseAuth autenticacao = ConfiguracaoFirebase.getFirebaseAutenticacao();
    private FloatingActionButton adicionarDespesa;
    private Double despesaTotal;
    private Double despesaGerada;
    private Double despesaAtualizada;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_despesa);
 
 
        editValor = findViewById(R.id.editValor);
        editData = findViewById(R.id.editData);
        editCategoria = findViewById(R.id.editCategoria);
        editSalarioMensal = findViewById(R.id.editSalarioMensal);
        adicionarDespesa = findViewById(R.id.adicionarDespesa);
        editDescricao = findViewById(R.id.editDescricao);
        editData.setText(DataCustom.dataAtual());
 
        recuperarDespesaTotal();
 
 
    }
 
    public void salvarDespesa(View view) {
 
        if (validarCampos()) {
 
            Movimentacao movimentacao = new Movimentacao();
            String data = editData.getEditableText().toString();
            movimentacao.setData(data);
 
 
            Double valorRecuperado = Double.parseDouble(editValor.getEditableText().toString());
            movimentacao.setValor(valorRecuperado);
            movimentacao.setCategoria(editCategoria.getEditableText().toString());
            movimentacao.setDescricao(editDescricao.getText().toString());
            movimentacao.setTipo("d");
 
            movimentacao.salvar(data);
 
            despesaGerada = valorRecuperado;
            despesaTotal = despesaGerada + despesaTotal;
 
        }
 
 
    }
 
 
    public Boolean validarCampos() {
 
 
        String cpoCategoria = editCategoria.getEditableText().toString();
        String cpoSalario = editSalarioMensal.getEditableText().toString();
        String cpoDescricao = editDescricao.getEditableText().toString();
        String cpoData = editData.getEditableText().toString();
 
        if (!cpoCategoria.isEmpty()) {
            if (!cpoSalario.isEmpty()) {
                if (!cpoDescricao.isEmpty()) {
                    if (!cpoData.isEmpty()) {
                        return true;
 
 
                    } else {
                        Toast.makeText(DespesaActivity.this, "Preencha o campo Data", Toast.LENGTH_SHORT).show();
                        return false;
                    }
                } else {
                    Toast.makeText(DespesaActivity.this, "Preencha o campo Descricao", Toast.LENGTH_SHORT).show();
                    return false;
                }
 
            } else {
                Toast.makeText(DespesaActivity.this, "Preencha o campo Salario", Toast.LENGTH_SHORT).show();
                return false;
            }
 
        } else {
            Toast.makeText(DespesaActivity.this, "Preencha o campo Categoria", Toast.LENGTH_SHORT).show();
            return false;
        }
 
    }
 
 
    public void recuperarDespesaTotal() {
        String emailUsuario = autenticacao.getCurrentUser().getEmail();
        String idUsuario = Base64Custom.decodificarBase64(emailUsuario);
        DatabaseReference usuarioRef = firebaseRef.child("usuarios").child(idUsuario);
 
        usuarioRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Usuario usuario = snapshot.getValue(Usuario.class);
                despesaTotal = usuario.getDespesaTotal();
            }
 
            @Override
            public void onCancelled(@NonNull DatabaseError error) {
 
            }
        });
 
 
    }
    public void atualizarDespesa(Double despesa){
        String emailUsuario = autenticacao.getCurrentUser().getEmail();
        String idUsuario = Base64Custom.decodificarBase64(emailUsuario);
        DatabaseReference usuarioRef = firebaseRef.child("usuarios").child(idUsuario);
 
            usuarioRef.child("despesaTotal").setValue(despesa);
 
    }

Usuario.class

package model;
 
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.Exclude;
 
import config.ConfiguracaoFirebase;
 
public class Usuario {
 
    private String idUsuario;
    private String nome;
    private String email;
    private String senha;
    private Double receitaTotal = 0.00;
    private Double despesaTota = 0.00;
 
 
    public Usuario(String nome, String email, String senha) {
        this.nome = nome;
        this.email = email;
        this.senha = senha;
    }
 
    public Usuario(){
 
    }
 
 
    public void salvar(){
        DatabaseReference firebase = ConfiguracaoFirebase.getFirebaseDataBase();
        firebase.child("usuarios")
                .child(this.idUsuario)
                .setValue(this);
 
    }
 
    public Double getReceitaTotal() {
        return receitaTotal;
    }
 
    public void setReceitaTotal(Double receitaTotal) {
        this.receitaTotal = receitaTotal;
    }
 
    public Double getDespesaTotal() {
        return despesaTotal;
    }
 
    public void setDespesaTotal(Double despesaTotal) {
        this.despesaTotal = despesaTotal;
    }
 
    @Exclude
    public String getIdUsuario() {
        return idUsuario;
    }
 
    public void setIdUsuario(String idUsuario) {
        this.idUsuario = idUsuario;
    }
 
    public String getNome() {
        return nome;
    }
 
    public void setNome(String nome) {
        this.nome = nome;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    @Exclude
    public String getSenha() {
        return senha;
    }
 
    public void setSenha(String senha) {
        this.senha = senha;
    }
}

LogCat

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.novoandroid.organizze, PID: 19718
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Double model.Usuario.getDespesaTotal()' on a null object reference
        at com.novoandroid.organizze.activity.DespesaActivity$1.onDataChange(DespesaActivity.java:133)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6543)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)

Minhas Regras no FireBase está ok

Nessa parte:

Usuario usuario = snapshot.getValue(Usuario.class);
despesaTotal = usuario.getDespesaTotal();

parece que o usuario está NULL.

é isso que eu também não estou conseguindo entender, pois o Usuario não está Null ele está com valor 0 que é diferente de Null;

Na minha classe Usuario está assim
private Double receitaTotal = 0.00;
private Double despesaTotal = 0.00;

tanto que no próprio Firebase o valor do campo não é null é 0
despTotal

e estou conseguindo Salvar Inicializando o valor com 0.00 o estranho está sendo na hora de recuperar que ele joga pra Null o que pra mim não está fazendo nenhum sentido

usuarioRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Usuario usuario = snapshot.getValue(Usuario.class);
                despesaTotal = usuario.getDespesaTotal();
            }

Tentei de tudo e até agora não descobri ainda porque está retornando null,

encontrei uma outra solução que é fazendo isso

  @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                despesaTotal = (Double) snapshot.child("despesaTotal").getValue();
            }
1 curtida