У меня возникают проблемы с Firebase, и я точно не знаю, почему. Поэтому я прочитал, что при использовании Firebase для захвата текущего пользователя по их идентификатору рекомендуется использовать: FirebaseAuth.getInstance().getCurrentUser().getUid();
, а затем использовать addListenerForSingleValueEvent
для захвата данных через datasnapshot
. Отлично, в одном из моих действий код работал, и я успешно захватил данные. Тем не менее, в моей другой деятельности слушатель полностью игнорируется в соответствии с отладчиком ... почему это так и как я должен это исправить? Или, есть ли лучший способ?Извлечь текущие данные пользователя Firebase?
Вот моя активность:
public class GroupActivity extends AppCompatActivity {
//Tag
private static String TAG = "GroupActivity";
//Firebase
private FirebaseDatabase database = FirebaseDatabase.getInstance();
private DatabaseReference mDatabase = database.getReference("users").child("groups"); //Does Users -> Groups
private DatabaseReference mRef = FirebaseDatabase.getInstance().getReference().child("users");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group);
ButterKnife.bind(this);
initializeBottomBar();
//Users from selected list -- previous activity data.
selectedUsers = (List<UserList>) getIntent().getSerializableExtra("users");
String groupName = getIntent().getStringExtra("groupName");
//CURRENT USER GOES IN FIRST.
// TODO : add current user.
String currentUserID = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference newRef = mRef.child(currentUserID);
newRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(TAG, "Name: " + dataSnapshot.child("name").getValue());
name = String.valueOf(dataSnapshot.child("name").getValue());
email = String.valueOf(dataSnapshot.child("email").getValue());
username = String.valueOf(dataSnapshot.child("username").getValue());
ID = String.valueOf(dataSnapshot.child("uid").getValue());
mCurrentUser.setName(name);
mCurrentUser.setUsername(username);
mCurrentUser.setEmail(email);
mCurrentUser.setUid(ID);
selectedUsers.add(mCurrentUser);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//ID
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
String uniqueKey = ref.child(currentUserID).child("groups").push().getKey();
//Groups of SelectedUsers!
SelectedUsers members = new SelectedUsers(groupName, uniqueKey, selectedUsers);
List<SelectedUsers> groups = new ArrayList<>();
groups.add(members);
Да, и если вам интересно, почему у меня есть несколько DatabaseReferences это потому, что я испытывал что-то, чтобы лучше понять, что происходит, это все.
UPDATE:
Я решил попробовать отладки selectedUsers.add(mCurrentUsers)
путем добавления точки останова внутри ValueEventListener
, и он показывает 2 пунктов, в зависимости от обстоятельств.
Однако, когда я отлаживаю вне ValueEventListener
, у него отсутствует текущий пользователь. Почему это происходит?? У меня были люди, предлагающие попробовать mAuthListener
, но вы не можете захватить datasnapshot, так что это кажется почти бесполезным, если вы не хотите, чтобы электронная почта пользователя и отображаемое имя, которое для вас хранило firebase ... help? Мне нужна информация о базе данных, а не информация входа/аутентификации текущего пользователя!
показать мне ваш Firebase дб снимок пожалуйста –
Вот ссылка на [DB SnapShot] (https://gyazo.com/a2584dc3b5e03a83c6a8f73015ad5c45) @RjzSatvara –