繁体   English   中英

如何从当前登录的用户 Firebase 获取数据

[英]How to get data from current logged in user Firebase

我想从我的应用程序中当前登录的用户那里获取所有数据,但是当我进入应该显示数据的活动时,应用程序停止工作。 我已经按照 Firebase 网站的指南正确设置了我的 Firebase,我可以通过身份验证登录,将数据保存到 firebase 中,并且只显示当前登录用户的所有数据,但现在我只想显示当前登录用户的数据。

这是我应该显示数据的活动

public class RsolverAccount extends AppCompatActivity {

    private FirebaseAuth firebaseAuth;
    TextView showEmail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rsolveraccount);

        setWidget();
        showData();
    }

    private void showData () {
        DatabaseReference mDatabase;
        mDatabase = FirebaseDatabase.getInstance().getReference().child("userdesc : "+ firebaseAuth.getCurrentUser().getUid());
        ValueEventListener postListener = new ValueEventListener() {

            @Override
            public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
                User user = dataSnapshot.getValue(User.class);
                showEmail.setText(user.getEmail());
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        };
        mDatabase.addValueEventListener(postListener);
   }

    public void setWidget() {
        showEmail = (TextView) findViewById(R.id.showEmail);
    }
}

这是我的 Json 树

sraboetapp 
    +description
    -userdesc
        -LquV8N1AJbRdhSKMA2T
            email: "bryan5@gmail.com"
            id: "870788464845"
            name: "bry5"
            pass: "123456"
            phone: "484854484546"

这是我的日志猫

2019-10-17 16:20:11.208 11014-11014/? I/ample.rsolveap: Not late-enabling -Xcheck:jni (already on)
2019-10-17 16:20:11.226 11014-11014/? E/ample.rsolveap: Unknown bits set in runtime_flags: 0x8000

2019-10-17 16:20:11.226 11014-11014/? W/ample.rsolveap: Unexpected CPU variant for X86 using defaults: x86

2019-10-17 16:20:11.583 11014-11049/com.example.rsolveapp W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.

2019-10-17 16:20:11.596 11014-11014/com.example.rsolveapp D/FirebaseAuth: Notifying id token listeners about user ( 0dkRQhKR1rQBcAUVYcULtI0C4zN2 ).

2019-10-17 16:20:11.598 11014-11014/com.example.rsolveapp D/FirebaseApp: com.google.firebase.iid.FirebaseInstanceId is not linked. Skipping initialization.

2019-10-17 16:20:11.598 11014-11014/com.example.rsolveapp D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.

2019-10-17 16:20:11.599 11014-11014/com.example.rsolveapp D/FirebaseApp: com.google.android.gms.measurement.AppMeasurement is not linked. Skipping initialization.

2019-10-17 16:20:11.599 11014-11014/com.example.rsolveapp I/FirebaseInitProvider: FirebaseApp initialization successful

2019-10-17 16:20:11.593 11014-11014/com.example.rsolveapp W/RenderThread: type=1400 audit(0.0:41): avc: denied { write } for name="property_service" dev="tmpfs" ino=6749 scontext=u:r:untrusted_app_27:s0:c130,c256,c512,c768 tcontext=u:object_r:property_socket:s0 tclass=sock_file permissive=0 app=com.example.rsolveapp

2019-10-17 16:20:11.608 11014-11056/com.example.rsolveapp D/libEGL: Emulator has host GPU support, qemu.gles is set to 1.

2019-10-17 16:20:11.608 11014-11056/com.example.rsolveapp W/libc: Unable to set property "qemu.gles" to "1": connection failed; errno=13 (Permission denied)

2019-10-17 16:20:11.619 11014-11056/com.example.rsolveapp D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so

2019-10-17 16:20:11.620 11014-11056/com.example.rsolveapp D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so

2019-10-17 16:20:11.622 11014-11056/com.example.rsolveapp D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so

2019-10-17 16:20:11.639 11014-11051/com.example.rsolveapp W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.

2019-10-17 16:20:11.646 11014-11051/com.example.rsolveapp I/FirebaseAuth: [FirebaseAuth:] Loading module via FirebaseOptions.

2019-10-17 16:20:11.646 11014-11051/com.example.rsolveapp I/FirebaseAuth: [FirebaseAuth:] Preparing to create service connection to gms implementation

2019-10-17 16:20:11.673 11014-11014/com.example.rsolveapp W/ample.rsolveap: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)

2019-10-17 16:20:11.673 11014-11014/com.example.rsolveapp W/ample.rsolveap: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)

2019-10-17 16:20:11.728 11014-11014/com.example.rsolveapp D/FirebaseApp: Notifying auth state listeners.

2019-10-17 16:20:11.728 11014-11014/com.example.rsolveapp D/FirebaseApp: Notified 0 auth state listeners.

2019-10-17 16:20:11.750 11014-11054/com.example.rsolveapp W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...

2019-10-17 16:20:11.752 11014-11054/com.example.rsolveapp D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 0 0

2019-10-17 16:20:11.752 11014-11054/com.example.rsolveapp D/EGL_emulation: eglCreateContext: 0xe151a180: maj 3 min 1 rcv 4

2019-10-17 16:20:11.769 11014-11054/com.example.rsolveapp D/EGL_emulation: eglMakeCurrent: 0xe151a180: ver 3 1 (tinfo 0xe150f480)

2019-10-17 16:20:11.771 11014-11054/com.example.rsolveapp E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da

2019-10-17 16:20:11.771 11014-11054/com.example.rsolveapp E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da

2019-10-17 16:20:11.782 11014-11054/com.example.rsolveapp W/Gralloc3: mapper 3.x is not supported

2019-10-17 16:20:11.785 11014-11054/com.example.rsolveapp D/eglCodecCommon: allocate: Ask for block of size 0x1000

2019-10-17 16:20:11.785 11014-11054/com.example.rsolveapp D/eglCodecCommon: allocate: ioctl allocate returned offset 0x3ff807000 size 0x2000

2019-10-17 16:20:11.794 11014-11054/com.example.rsolveapp D/EGL_emulation: eglMakeCurrent: 0xe151a180: ver 3 1 (tinfo 0xe150f480)

2019-10-17 16:20:11.813 11014-11054/com.example.rsolveapp D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 1 0

这是我的用户 class

package com.example.rsolveapp;

import com.google.firebase.database.IgnoreExtraProperties;

import java.io.Serializable;

public class User implements Serializable{
private String email;
private String name, pass, id, phone;
private String key;

public User(){

}

public String getKey(){
    return key;
}

public void setKey(String key){
    this.key=key;
}

public String getEmail(){
    return email;
}

public void setEmail(String email){
    this.email=email;
}

public String getName(){
    return name;
}

public void setName(String name){
    this.name=name;
}

public String getPass(){
    return pass;
}

public void setPass(String pass){
    this.pass=pass;
}

public String getId(){
    return id;
}

public void setId(String id){
    this.id=id;
}

public String getPhone(){
    return phone;
}

public void setPhone(String phone){
    this.phone=phone;
}

@Override
public String toString(){
    return " "+email+"/n"+
            " "+name+"/n"+
            " "+pass+"/n"+
            " "+id+"/n"+
            " "+phone;
}

public User(String Remail, String Rname, String Rpass, String Rid, String Rphone){
    email=Remail;
    name=Rname;
    pass=Rpass;
    id=Rid;
    phone=Rphone;
}
}

编辑:这是我现在的活动

public class RsolverAccount extends AppCompatActivity {


TextView showEmail;
private static final String TAG = RsolverAccount.class.getSimpleName();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.rsolveraccount);

    setWidget();
    showData();
}

private void showData () {

    FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    if(firebaseUser != null) {
        String email = firebaseUser.getEmail();
        Log.d(TAG, email);
    }

    FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
    DatabaseReference mDatabase;
    mDatabase = FirebaseDatabase.getInstance().getReference().child("sraboetapp").child("userdesc").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
    ValueEventListener postListener = new ValueEventListener() {

        @Override
        public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);
            showEmail.setText(user.getEmail());
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    };
    mDatabase.addValueEventListener(postListener);
}

public void setWidget() {
    showEmail = (TextView) findViewById(R.id.showEmail);
}
}

这是我得到的错误

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.rsolveapp, PID: 13698
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.rsolveapp.User.getEmail()' on a null object reference
    at com.example.rsolveapp.RsolverAccount$1.onDataChange(RsolverAccount.java:45)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.4:75)
    at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.4:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.4:55)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

根据您的数据库结构,您的查询可能是错误的:

尝试使用这个:

mDatabase = FirebaseDatabase.getInstance().getReference().child("sraboetapp").child("userdesc").child(FirebaseAuth.getInstance().getCurrentUser().getUid());

代替:

mDatabase = FirebaseDatabase.getInstance().getReference().child("userdesc : "+ firebaseAuth.getCurrentUser().getUid());

您使用用户和 ID 一起搜索子项的查询在您的数据库中不可用,我不知道sraboetapp是基本节点还是只是应用程序名称,所以我把它放了。

根据您的评论,您收到以下错误:

尝试调用虚拟方法 'com.google.firebase.auth.FirebaseUser com.google.ZBF12E1515C25C7D8C0352F1413AB9A15A15Z.auth.FirebaseAuth'.getCurrentUser

因为您的firebaseAuth object 是null 你没有初始化它。 要解决这个问题,只需添加以下代码行:

FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();

作为showData()方法的第一行。

编辑:

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if(firebaseUser != null) {
    String email = firebaseUser.getEmail();
    Log.d(TAG, email);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM