【发布时间】:2017-01-06 06:31:57
【问题描述】:
我在使用 Firebase 时遇到问题,我不确定具体原因。所以我读到,使用 Firebase 通过 ID 获取当前用户是一种很好的做法,使用:FirebaseAuth.getInstance().getCurrentUser().getUid();,然后使用 addListenerForSingleValueEvent 通过datasnapshot 获取数据。太好了,在我的一项活动中,代码有效并且我成功获取了数据。但是,在我的其他活动中,根据调试器完全忽略了侦听器......为什么会这样,我应该如何解决这个问题?或者,有没有更好的方法?
这是我的活动:
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);
哦,如果您想知道为什么我有多个 DatabaseReference,那是因为我正在测试一些东西以更好地了解发生了什么,仅此而已。
更新:
我决定尝试通过在ValueEventListener 内添加断点来调试selectedUsers.add(mCurrentUsers),它会根据需要显示2 个项目。
但是,当我在 ValueEventListener 之外进行调试时,它会丢失当前用户。为什么会这样??我有人建议尝试mAuthListener,但是您无法获取数据快照,因此这似乎几乎没有用,除非您想要用户的电子邮件和firebase为您保存的显示名称...帮助?我需要数据库信息而不是当前用户的登录/身份验证信息!
【问题讨论】:
-
请给我看看你的 Firebase 数据库快照
-
这里是DB SnapShot@RjzSatvara 的链接
标签: android firebase firebase-realtime-database firebase-authentication