Erro Can't convert object of type java.lang.Long to type model.Usuario Não consigo entender o porque

Meu código está apresentando o seguinte erro com.google.firebase.database.DatabaseException: Can’t convert object of type java.lang.Long to type model.Usuario

fiz o Debug mas ainda não consegui achar a solução , podem me orientar por favor

Boa Noite , estou com a seguinte dificuldade na parte de atualizar os valores vindo do Banco está apresentando o seguinte erro : Can’t convert object of type java.lang.Long to type model.Usuario, não estou conseguindo entender o porque disso

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

}

Meu Principal Activity

import com.google.android.material.appbar.CollapsingToolbarLayout; 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 com.prolificinteractive.materialcalendarview.CalendarDay; import com.prolificinteractive.materialcalendarview.MaterialCalendarView; import com.prolificinteractive.materialcalendarview.OnMonthChangedListener;

import java.text.DecimalFormat;

import config.ConfiguracaoFirebase; import helper.Base64Custom; import model.Usuario;

public class PrincipalActivity extends AppCompatActivity {

private MaterialCalendarView calendarView;
private TextView textoSaudacao, textoSaldo;
private DatabaseReference firebaseRef = ConfiguracaoFirebase.getFirebaseDataBase();
private FirebaseAuth autenticacao = ConfiguracaoFirebase.getFirebaseAutenticacao();
private Double despesaTotal = 0.00 ;
private Double receitaTotal = 0.00 ;
private Double resumoUsuario = 0.00 ;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_principal);
    CollapsingToolbarLayout toolbar = (CollapsingToolbarLayout) findViewById(R.id.toolbar);


    calendarView = findViewById(R.id.calendarView);
    textoSaudacao = findViewById(R.id.textSaldacao);
    textoSaldo = findViewById(R.id.textSaldo);
    //configuraCalendarView();
    recuperarResumo();

    /*
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });*/
}


public void recuperarResumo() {

    String emailUsuario = autenticacao.getCurrentUser().getEmail();
    String idUsuario = Base64Custom.codificarBase64(emailUsuario);
    DatabaseReference usuarioRef = firebaseRef.child("usuarios").child(idUsuario);

    usuarioRef.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
                     for(DataSnapshot ds : snapshot.getChildren()){
                        Usuario usuario = ds.getValue(Usuario.class);

                         despesaTotal = (Double)usuario.getDespesaTotal();
                         receitaTotal =  (Double)usuario.getReceitaTotal();

                        DecimalFormat decimalFormat = new DecimalFormat("0.##");
                        String resultadoFormatado =  decimalFormat.format(resumoUsuario);
                        textoSaudacao.setText("Olá" + usuario.getNome());
                        textoSaldo.setText(resultadoFormatado);

        }

            }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });



    }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.action_sair:
            autenticacao.signOut();
            startActivity(new Intent(this, MainActivity.class));
            finish();
    }
    return super.onOptionsItemSelected(item);

}

public void adicionarDespesa(View view) {

    startActivity(new Intent(this, DespesaActivity.class));
}


public void adicionarReceita(View view) {

    startActivity(new Intent(this, ReceitasActivity.class));

}

public void configuraCalendarView() {
    CharSequence meses[] = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto",
            "Setembro", "Outubro", "Novembro", "Dezembro"};

    calendarView.setTitleMonths(meses);

    calendarView.setOnMonthChangedListener(new OnMonthChangedListener() {
        @Override
        public void onMonthChanged(MaterialCalendarView widget, CalendarDay date) {

        }
    });

}

}

Desde já agradeço a resposta

Teu erro provavelmente está nessa linha.

Posta a mensagem de erro completa, por gentileza.

Boa Noite! rudo bem ? no meu Logcat apresenta o Erro Abaixo

com.google.firebase.database.DatabaseException: Can’t convert object of type java.lang.Long to type model.Usuario
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:436)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:232)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:80)
at com.google.firebase.database.DataSnapshot.getValue(DataSnapshot.java:203)
at com.novoandroid.organizze.activity.PrincipalActivity$1.onDataChange(PrincipalActivity.java:78)
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)

O que tem na linha 78 do PrincipalActivity.java?

                        Usuario usuario = ds.getValue(Usuario.class);

Entendeu o erro?

Você está atribuindo a um objeto um valor que não corresponde a ele.

Você pode fazer uma string = outra string;
Um inteiro = outro inteiro
Um booleano = outro booleano

Mas você não pode fazer um booleano = inteiro. Um booleano é só verdadeiro (“true”) ou falso (“false”), ele não pode ser 10, ou 18, ou 127.

Da mesma forma, você está tentando atribuir um Long (resultado de ds.getValue(Usuario.class)) para o objeto usuário que é do tipo Usuário.

Entendeu?

1 curtida

Compreendi :), Obrigado :smiley: ,

Fiz desta forma e agora deu certo não tinha me atentado a isso.

public void onDataChange(@NonNull DataSnapshot snapshot) {

            despesaTotal = snapshot.getValue(Usuario.class).getDespesaTotal();
            receitaTotal = snapshot.getValue(Usuario.class).getReceitaTotal();
            resumoUsuario = receitaTotal - despesaTotal;
            DecimalFormat format = new DecimalFormat("0.##");
            String resultadoFormatado = format.format(resumoUsuario);

            textoSaudacao.setText("Olá" + "  " + snapshot.getValue(Usuario.class).getNome() );
            textoSaldo.setText(resultadoFormatado);