База данных Firebase DataSnapshot не работает - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь показать зарегистрированному пользователю приветственное сообщение в зависимости от его пола. Если «мужской», то setText("Hello Sir, your mail is: " + user.getEmail()), а для остальных setText("Hello Madam, your mail is: " + user.getEmail()). Это моя структура базы данных: enter image description here

Это профиль активности Java, над которым я работаю:

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.support.v7.app.AppCompatActivity;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class ProfileActivity extends AppCompatActivity {
    TextView textViewUserEmail;

    private FirebaseDatabase mFirebaseDatabase;
    private FirebaseAuth mAuth;
    public DatabaseReference myRef;
    public String userID;

    @Override
    protected void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.activity_profile);

        mAuth = FirebaseAuth.getInstance();
        Firebase.setAndroidContext(this);
        mFirebaseDatabase = FirebaseDatabase.getInstance();
        myRef = mFirebaseDatabase.getReference();
        final FirebaseUser user = mAuth.getCurrentUser();
        userID = user.getUid();
        DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("UsersMale");

        textViewUserEmail = (TextView) findViewById(R.id.textViewUserEmail);
        loadUserInformation();

        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String myStrign = dataSnapshot.getValue(String.class);
                if (user.isEmailVerified() && myStrign.equals("male")) {
                    textViewUserEmail.setText("Hello Sir, your mail is: " + user.getEmail());
                } else {
                    textViewUserEmail.setText("Hello Madam, your mail is: " + user.getEmail());
                }
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {}
        });
    }

}
}

Код возвращает ошибку. Подскажите, пожалуйста, что я здесь делаю не так? Заранее спасибо.

1 Ответ

0 голосов
/ 27 июня 2018

Измените структуру базы данных на:

 users
   uniqueId
        name: superman
        gender: male
   uniqueId
        name: girl
        gender: female

Нет необходимости иметь два родительских узла UserMale и UserFemale, просто создайте один узел, назовите его users, и у каждого пользователя будет атрибут пола.

затем сделайте это:

FirebaseUser user = mAuth.getCurrentUser();
String userID = user.getUid();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");

ref.child(userID).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            String gender=dataSnapshot.child("gender").getValue().toString();
            if(gender.equals("male")) {
                textViewUserEmail.setText("Hello Sir, your mail is: " + user.getEmail());
            } else {
                textViewUserEmail.setText("Hello Madam, your mail is: " + user.getEmail());
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {}
    });
}

Сначала получите идентификатор пользователя, затем укажите местоположение в users, затем присоедините прослушиватель и получите значение пола вошедшего в систему пользователя.

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