Android 如何访问没有值的firebase密钥

Android 如何访问没有值的firebase密钥,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我对安卓和firebase还很陌生。我正在制作一个通过蓝牙与设备连接的应用程序,配对后,用户可以共享设备。现在一切正常,直到我尝试从Firebase检索数据。 以下是我的数据库结构: 共享设备是用户可以与其他人共享的设备。用户设备是用户保存的设备。“meh”是设备的名称。 以下是我尝试访问数据的方式: public class RecievedKeys extends AppCompatActivity { String key; TextView mName; Tex

我对安卓和firebase还很陌生。我正在制作一个通过蓝牙与设备连接的应用程序,配对后,用户可以共享设备。现在一切正常,直到我尝试从Firebase检索数据。 以下是我的数据库结构:

共享设备是用户可以与其他人共享的设备。用户设备是用户保存的设备。“meh”是设备的名称。 以下是我尝试访问数据的方式:

public class RecievedKeys extends AppCompatActivity {
    String key;
    TextView mName;
    TextView mDevice;
    String name;
    String MAC;
    User user = new User();
    DatabaseReference mDatabaseRef;
    String decPass;
    String password;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recieved_keys);
        mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Shared_With").child(User.getUid());
        mName = (TextView)findViewById(R.id.name);
        mDevice = (TextView)findViewById(R.id.MAC);
        mDatabaseRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                name = dataSnapshot.child("Name").getValue().toString();
                MAC = dataSnapshot.child("MAC").getValue().toString();
                password = dataSnapshot.child("password").getValue().toString();
                System.out.println(name);
                mName.setText(name);
                mDevice.setText(MAC);
                decPassword(password);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
我无法获取任何内容,而是引发了一个异常。任何指导都将不胜感激

下面是正在引发的异常NullPointer:

   05-12 06:10:25.608 5268-5268/habibqureshi.simplegui.simplegui E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
                                                                                       at habibqureshi.simplegui.SmartLock.RecievedKeys$1.onDataChange(RecievedKeys.java:38)
                                                                                       at com.google.android.gms.internal.zzbmz.zza(Unknown Source)
                                                                                       at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source)
                                                                                       at com.google.android.gms.internal.zzboc$1.run(Unknown Source)
                                                                                       at android.os.Handler.handleCallback(Handler.java:739)
                                                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                       at android.os.Looper.loop(Looper.java:135)
                                                                                       at android.app.ActivityThread.main(ActivityThread.java:5910)
                                                                                       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:1405)
                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
05-12 06:10:25.608 5268-5426/habibqureshi.simplegui.simplegui D/FA: Logging event (FE): _ae, Bundle[{_o=crash, _sc=RecievedKeys, _si=4592305897079779979, timestamp=1494551425619, fatal=1}]
05-12 06:10:25.939 5268-5268/habibqureshi.simplegui.simplegui E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                Process: habibqureshi.simplegui.simplegui, PID: 5268
                                                                                java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
                                                                                    at habibqureshi.simplegui.SmartLock.RecievedKeys$1.onDataChange(RecievedKeys.java:38)
                                                                                    at com.google.android.gms.internal.zzbmz.zza(Unknown Source)
                                                                                    at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source)
                                                                                    at com.google.android.gms.internal.zzboc$1.run(Unknown Source)
                                                                                    at android.os.Handler.handleCallback(Handler.java:739)
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                    at android.os.Looper.loop(Looper.java:135)
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:5910)
                                                                                    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:1405)
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

我需要做的是访问Shared_中的值->UID->Email->name->children

也许您需要以不同的方式构造数据。 您可以这样做:

{ 
    shared {
        receiver_id {
            user_id: true,
            user_id: true,
            user_id: true
        }
    }

    devices {
        user_id {

            meh: {
                attribute: 'lorem ipsum'
            }
        }
    }
}

为此,请使用以下代码:

mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Shared_With").child(User.getUid()).child(User.getEmail()).child("meh");
    mName = (TextView)findViewById(R.id.name);
    mDevice = (TextView)findViewById(R.id.MAC);
    mDatabaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            name = (String) dataSnapshot.getKey();
            MAC = (String) dataSnapshot.child("MAC").getValue();
            password = (String) dataSnapshot.child("password").getValue();
            System.out.println(name);
            mName.setText(name);
            mDevice.setText(MAC);
            decPassword(password);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
问题是您的
参考资料中缺少一些孩子


希望能有所帮助。

上传日志,显示异常抛出的位置-这将帮助这里的人们识别出哪里出了问题。日志补充道。这就是我感到困惑的地方。电子邮件,嗯,它们是用户生成的。如何访问它们?使用uid很容易,即使我要访问macn密码。但我如何获得用户生成的呢?不建议这样做,您也不应该这样做,但您可以尝试看看是否适合您。但您应该做的是创建一个在firebase中映射json的类,firebase sdk可以轻松地在类对象中转换json,您可以在这里看到一个完整的示例:已经用其他类完成了。这里的问题是,与数据共享的_被生成,如UID是发送方的。电子邮件是收信人的首选。现在在接收端,用户如何知道或从数据库中获取值以查看发送给他的内容?这就是问题所在。我刚刚更新了我的答案,请让我知道这是否是你需要的。谢谢,但不是我需要的。我已经在一些地方这样做了。这是不同的