我正在从RealTime数据库检索某些值,但是每次它显示空指针异常时。实际上,我想访问一个孩子的所有数据,并且当通过数据库更改数据时,我也对数据进行了新的更新。我的代码是这样,在此代码中我想在“文本视图”中附加值,但显示空指针异常。请解决我的问题。
db=FirebaseDatabase.getInstance();
dr=db.getReference().child("us");
dr.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
txtMsg.append((CharSequence) postSnapshot.child("name").getValue());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
我的LogCat是:
0.481 31984-32018/com.thebhakti E/GED: Failed to get GED Log Buf, err(0)
09-02 16:51:11.891 31984-32036/com.thebhakti E/NativeCrypto: ssl=0xb7352a78 cert_verify_callback x509_store_ctx=0xa0aa11d0 arg=0x0
09-02 16:51:11.891 31984-32036/com.thebhakti E/NativeCrypto: ssl=0xb7352a78 cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_RSA
09-02 16:51:14.579 31984-31984/com.thebhakti E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.thebhakti, PID: 31984
java.lang.NullPointerException: Attempt to invoke interface method 'int java.lang.CharSequence.length()' on a null object reference
at android.widget.TextView.append(TextView.java:3643)
at com.thebhakti.RealtimeMain$2.onDataChange(RealtimeMain.java:71)
at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source)
at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source)
at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5643)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
答案 0 :(得分:0)
正如您所说,要在数据库中更改TextView txtMsg
中的数据时进行更新。因此,您使用的方法将给出以下不合适的结果。
我正在考虑使用单个名称,即Akshay
txtMsg.append((CharSequence) postSnapshot.child("name").getValue());
它将给出结果-Akshay
假设您将名称从Akshay更改为Punitt。因此,名称Punitt将附加在txtMsg中,结果将是-
AkshayPunitt
但是正确的方法是应该用Punitt代替Akshay。因此,您应该使用如图所示的方法setText()
-
txtMsg.setText(postSnapshot.child("name").getValue().toString());
答案 1 :(得分:0)
This is not a proper way, use model class to retrieve a data.
please refer this link
https://firebase.google.com/docs/database/android/read-and-write