Y. *_*aio 3 java android firebase firebase-authentication firebase-realtime-database
在Firebase中执行查询时出现错误,我的查询代码如下所示:
@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) {
}
});
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
异常java.lang.RuntimeException:无法启动活动ComponentInfo {ucarparceiro.ucarapp.com.ucarparceiro / ucarparceiro.ucarapp.com.ucarparceiro.Activity.ActivityPrincipal.ActivityPerfil}:java.lang.NullPointerException:无法为参数'传递null child()中的pathString' 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)
Firebase中的数据如下:
您很可能会收到错误消息,因为cpf在将其作为子级使用时为null mReferenceplaca。发生这种情况是因为Firebase异步下载数据,并且您的代码行是同步执行的。因此,在mReferencePlaca.child("Funcionario").child(cpf).child("placa")执行此行时,的值cpf仍为null,因为这cpf = dataSnapshot.getValue(String.class);尚未发生。
要解决这个问题,请更改:-
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) {
}
});
Run Code Online (Sandbox Code Playgroud)
对此:-
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) {
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8394 次 |
| 最近记录: |