在我的主要活动的onCreate()方法中,我的一个例程是与Firebase数据库通信,以完成以下三件事之一: 1)如果用户是返回用户,则更新他们在本地使用SharedPreferences存储的Firebase上的所有首选项。2)如果用户是新用户,并且没有存储在云上的数据(他们从未下载过应用程序),则什么也不做。3)如果用户是新用户,但在其唯一的Facebook配置文件ID下存储了首选项,请下载他们的首选项并将其应用于SharedPreferences实例。
我肯定错过了一些关键的,可能是基本的,关于DataSnapshot如何工作的见解,因为我不能让我的以下代码工作:
private void initializeFirebase(){
my_db = FirebaseDatabase.getInstance();
DatabaseReference my_ref = my_db.getReference();
Map<String, ?> values = sharedPreferences.getAll();
if (values.isEmpty()){
final String id = Profile.getCurrentProfile().getId();
my_ref = my_ref.child("userid");
my_ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.getKey().equals(id)){
data = (Map<String, Object>)dataSnapshot.getValue();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
else {
for (Map.Entry<String, ?> entry : values.entrySet()) {
my_ref.child("userid").child(Profile.getCurrentProfile().
getId()).child(entry.getKey()).setValue(entry);
}
}
}
data是一个全局映射变量,在执行getValue()后始终为null。
我的JSON树被组织为: root、->、users、->、userid、->,每个首选项都作为userid节点的子节点。任何帮助都将不胜感激!!
https://stackoverflow.com/questions/51144765
复制相似问题