null for argument 'pathString'
Solution 1
You're most likely getting an error because cpf
is null when you use it as a child in mReferenceplaca
. This happens because Firebase downloads data asynchronously and your code lines are executed synchronously. Therefore, by the time this line mReferencePlaca.child("Funcionario").child(cpf).child("placa")
is executed, the value of cpf
is still null because this cpf = dataSnapshot.getValue(String.class);
hasn't happened yet.
To solve this, change this :-
DatabaseReference mReferenceCpf = FirebaseDatabase.getInstance().getReference();
databaseReference.child("Usuario").child(uId).child("cnpjCpf")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
cpf = dataSnapshot.getValue(String.class);
txtCpf.setText(cpf);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
DatabaseReference mReferencePlaca = FirebaseDatabase.getInstance().getReference();
mReferencePlaca.child("Funcionario").child(cpf).child("placa")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
placa = dataSnapshot.getValue(String.class);
txtPlaca.setText(placa);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
to this :-
DatabaseReference mReferenceCpf = FirebaseDatabase.getInstance().getReference();
databaseReference.child("Usuario").child(uId).child("cnpjCpf")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
cpf = dataSnapshot.getValue(String.class);
txtCpf.setText(cps);
DatabaseReference mReferencePlaca = FirebaseDatabase.getInstance().getReference();
mReferencePlaca.child("Funcionario").child(cpf).child("placa")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
placa = dataSnapshot.getValue(String.class);
txtPlaca.setText(placa);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Solution 2
To solve your problem, just declare nome
, cpf
and placa
Strings inside the coresponding onDataChange()
methods, otherwise is null, due the asynchronous behaviour.
As an example, please use this code:
public void onDataChange(DataSnapshot dataSnapshot) {
String nome = dataSnapshot.getValue(String.class);
TextView txtNome = (TextView) findViewById(R.id.txtNomePerfil);
txtNome.setText(nome);
}
In the same way, you need to make the other changes.
Y. Sampaio
Updated on June 04, 2022Comments
-
Y. Sampaio almost 2 years
I am having an error when I perform queries in firebase, my code for query looks like this:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_perfil); txtNome = (TextView) findViewById(R.id.txtNomePerfil); txtCpf = (TextView) findViewById(R.id.txtCpfPerfil); txtEmail = (TextView) findViewById(R.id.txtEmailPerfil); txtFone = (TextView) findViewById(R.id.txtCelularPerfil); txtPlaca = (TextView) findViewById(R.id.txtPlacaPerfil); imgPerfil = (ImageView) findViewById(R.id.imgPerfil); txtNomeFantasia = (TextView) findViewById(R.id.txtNomeFantasiaPerfil); txtCnpj = (TextView) findViewById(R.id.txtCnpjPerfil); firebaseUser = firebaseAuth.getInstance().getCurrentUser(); uId = firebaseUser.getUid(); email = firebaseUser.getEmail(); txtEmail.setText(email); databaseReference = FirebaseDatabase.getInstance().getReference(); databaseReference.child("Usuario").child(uId).child("nome") .addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { nome = dataSnapshot.getValue(String.class); txtNome.setText(nome); } @Override public void onCancelled(DatabaseError databaseError) { } }); DatabaseReference mReferenceCpf = FirebaseDatabase.getInstance().getReference(); databaseReference.child("Usuario").child(uId).child("cnpjCpf") .addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { cpf = dataSnapshot.getValue(String.class); txtCpf.setText(cpf); } @Override public void onCancelled(DatabaseError databaseError) { } }); DatabaseReference mReferencePlaca = FirebaseDatabase.getInstance().getReference(); mReferencePlaca.child("Funcionario").child(cpf).child("placa") .addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { placa = dataSnapshot.getValue(String.class); txtPlaca.setText(placa); } @Override public void onCancelled(DatabaseError databaseError) { } });
However I am getting the following error:
Exception java.lang.RuntimeException: Unable to start activity ComponentInfo{ucarparceiro.ucarapp.com.ucarparceiro/ucarparceiro.ucarapp.com.ucarparceiro.Activity.ActivityPrincipal.ActivityPerfil}: java.lang.NullPointerException: Can't pass null for argument 'pathString' in child() android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2316) android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2376) android.app.ActivityThread.access$800 (ActivityThread.java:147) android.app.ActivityThread$H.handleMessage (ActivityThread.java:1281) android.os.Handler.dispatchMessage (Handler.java:102) android.os.Looper.loop (Looper.java:135) android.app.ActivityThread.main (ActivityThread.java:5253) java.lang.reflect.Method.invoke (Method.java) java.lang.reflect.Method.invoke (Method.java:372) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:899) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:694)
The data in Firebase is as follows: