【问题标题】:Unable to Update Firebase user table with userId无法使用 userId 更新 Firebase 用户表
【发布时间】:2018-04-27 11:35:10
【问题描述】:

在这里,我在注册过程中使用“firstName”、“lastName”、“email”、“password”创建了一个“Firebase”用户。成功登录后,我使用新的两个“Edittext”将所有注册值加载到另一个屏幕。现在我需要通过“Firebase”“userId”更新该注册表,并使用新的两个值“国家”和“职业”输入新的“ EditText'。为了完成注册过程并添加新值,我使用了“UserProfileBean”类。

下面是代码。

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("new_user");
        FirebaseUser user= FirebaseAuth.getInstance().getCurrentUser();
        String userid=user.getUid();


        final UserProfileBean userProfileBean = new UserProfileBean();
        userProfileBean.setCountry(country.getText().toString());
        userProfileBean.setOccupation(occupation.getText().toString());

        Log.d("UPDATE_PROFILE", "UPDATE_PROFILE_DATA" + userid + "," +
                userProfileBean.getOccupation() + ", " + userProfileBean.getCountry());

        //myRef.child(userid).child("country").setValue(userProfileBean.getCountry());

        Query pendingTasks = myRef.child(userid).orderByChild("country").equalTo("");
        pendingTasks.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot tasksSnapshot) {
                for (DataSnapshot snapshot: tasksSnapshot.getChildren()) {
                    snapshot.getRef().child("country").setValue(userProfileBean.getCountry());
                    snapshot.getRef().child("occupation").setValue(userProfileBean.getOccupation());
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
                System.out.println("The read failed: " + databaseError.getMessage());
            }
        });

以上代码由按钮'onclickListener'实现。

【问题讨论】:

  • new_user 数据库的用户表在注册过程中没有输入国家和职业值。在注册过程之后,我需要将这两个值都输入到用户表中。
  • 有什么问题? IE。当您通过调试器运行代码时,它会进入onDataChange 吗?它会进入循环吗?如果您再查看snapshot.getKey(),它是否具有您期望的价值? Stack Overflow 是一个非常低效的交互式调试器,因此您必须在运行代码时告诉我们发生了什么。
  • @Frank van Puffelen:代码在 onDataChange 内部。不是for循环,public void onDataChange(DataSnapshot tasksSnapshot) { Log.d("UPDATE_PROFILE", "INSIDE_DATACHANGED"); for (DataSnapshot 快照: tasksSnapshot.getChildren()) { Log.d("UPDATE_PROFILE", "INSIDE_LOOP"); snapshot.getRef().child("country").setValue(userProfileBean.getCountry()); snapshot.getRef().child("职业").setValue(userProfileBean.getOc​​cupation()); } }
  • 您的一些问题需要特别或优先关注。请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。

标签: java android firebase firebase-realtime-database android-edittext


【解决方案1】:

要更新用户节点,请尝试以下操作:

FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
String useruid=user.getUid();
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("User").child(useruid);

 Map<String,Object> update=new HashMap<>();
 update.put("Country",userProfileBean.getCountry());
 update.put("Occupation",userProfileBean.getOccupation());

ref.updateChildren(update);

更多信息在这里:

https://firebase.google.com/docs/database/android/read-and-write#update_specific_fields

【讨论】:

  • 我进行了更改。但什么都没有。
  • 将 child("User") 更改为 child("new_user") 数据库中的节点
猜你喜欢
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 2020-05-31
  • 2021-12-15
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多