Как получить данные от текущего вошедшего в систему пользователя Firebase - PullRequest
0 голосов
/ 17 октября 2019

Я хочу получить все данные от текущего пользователя, вошедшего в мои приложения, но когда я попадаю в действие, которое должно показывать данные, приложение перестало работать. Я правильно настроил 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 Tree

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

Это мой logcat

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

Thisмой класс пользователя

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)

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Согласно вашему комментарию, вы получаете следующую ошибку:

Попытка вызвать виртуальный метод 'com.google.firebase.auth.FirebaseUser com.google.firebase.auth.FirebaseAuth.getCurrentUser() '

Потому что ваш firebaseAuth объект - null. Вы не инициализировали это. Чтобы решить эту проблему, просто добавьте следующую строку кода:

FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();

в качестве первой строки в вашем методе showData().

Редактировать:

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if(firebaseUser != null) {
    String email = firebaseUser.getEmail();
    Log.d(TAG, email);
}
1 голос
/ 17 октября 2019

Ваш запрос может быть неправильным в соответствии с вашей структурой базы данных:

Попробуйте использовать это:

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

Вместо:

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

Ваш запрос ищет ребенкас пользователем и идентификатором вместе, который недоступен в вашей базе данных, и я не знаю, является ли sraboetapp базовым узлом или просто именем приложения, поэтому я поставил его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...