从Firebase数据库检索数据显示空指针异常。怎么样?

时间:2018-09-02 11:31:02

标签: android firebase firebase-realtime-database real-time-data

enter image description here我正在从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)

2 个答案:

答案 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