参数’pathString’为null
我在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) { } });
但是我收到以下错误:
exceptionjava.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中的数据如下:
用户 员工
您最有可能收到错误,因为当您在mReferenceplaca
其用作子项时, cpf
为null。 这是因为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) { } });
对此: –
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) { } });
要解决您的问题,只需在相应的onDataChange()
方法中声明nome
, cpf
和onDataChange()
字符串,否则为null,因为异步行为。
例如,请使用以下代码:
public void onDataChange(DataSnapshot dataSnapshot) { String nome = dataSnapshot.getValue(String.class); TextView txtNome = (TextView) findViewById(R.id.txtNomePerfil); txtNome.setText(nome); }
以同样的方式,您需要进行其他更改。
private FirebaseAuth mAuth; private FirebaseAuth.AuthStateListener mAuthListener;
在onCreate()方法中,初始化FirebaseAuth实例和AuthStateListener方法,以便您可以在用户登录或注销时进行跟踪。
mAuth = FirebaseAuth.getInstance(); mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { // User is signed in Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); } else { // User is signed out Log.d(TAG, "onAuthStateChanged:signed_out"); } // ... }
};
将侦听器附加到onStart()方法中的FirebaseAuth实例,并在onStop()上将其删除。
public void onStart() { super.onStart(); mAuth.addAuthStateListener(mAuthListener);
}
public void onStop() { super.onStop(); if (mAuthListener != null) { mAuth.removeAuthStateListener(mAuthListener); }
}
https://firebase.google.com/docs/auth/android/start/?hl=es-419
- 如何使用Android对Firestore进行分页?
- FirebaseRecyclerAdapter无法填充结果
- 在Android Firebase存储中上传文件后如何获取文件下载Url? getDownloadUrl()不起作用
- 当子节点的父节点未知时从Firebase检索数据
- 我对托管Java Web应用程序有何不理解?
- DatabaseException:无法将java.lang.String类型的对象转换为type
- Firebase列表适配器构造函数错误
- 重复条目:com / google / android / gms / auth / api / signin / internal / zzf.class
- 注销和登录后,用户信息将重新初始化