【问题标题】:Android firebase databaseAndroid Firebase 数据库
【发布时间】:2018-03-30 10:39:09
【问题描述】:

我正在尝试构建一个基于旅行的应用程序,注册用户可以在其中成为导游。对于这个项目,我使用 firebase 数据库来获取在线功能。我的问题是当用户想要成为向导时,我从常规 USER 节点获取他的个人详细信息并将其复制到 GUIDES 节点。我希望所有注册用户都能看到所选城市的现有指南。

假设 B 用户想成为伦敦的向导。其他用户(非向导)可以通过单击城市(在本例中为伦敦)找到向导。我找不到正确引用节点的方法。

newdatabaseRef = FirebaseDatabase.getInstance().getReference().child("Guides").push();

newdatabaseRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                String gName, gSurname, gDate, gPhone, gPhoto, gCity;

                gName = guideName.getText().toString().trim();
                gSurname = guideSurname.getText().toString().trim();
                gDate = guideDate.getText().toString().trim();
                gPhone = guidePhoneNr.getText().toString().trim();
                gPhoto = guidePhotoURL.getText().toString().trim();
                gCity = pickedCity.getText().toString().trim();

                UserModelClass guides = new UserModelClass(gPhoto, gName, gSurname , gDate, gPhone, gCity);
                newdatabaseRef.setValue(guides);

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

这就是我如何将用户的详细信息存储到带有一个额外子 gCity 的新 Guide 节点中。

Firebase 结构

这就是我尝试从数据库中提取数据并将其填充到适当城市的方式。我正在尝试将指南与所选城市相匹配。如果指南选择伦敦作为城市,我将使用 Post cityName 进行检查。

guideDataRef = FirebaseDatabase.getInstance().getReference().child("Guides");


mDataRef.child(post_key).addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                    for(DataSnapshot ds : dataSnapshot.getChildren()){
                        final String bb = ds.getValue().toString();
                        //Log.d(TAG, "TEST " + bb);

                        guideDataRef.startAt("pickedCity").addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                String cc = (String) dataSnapshot.child("pickedCity").getValue();



                                //          Exception NullPointer
                                try{
                                    if(dataSnapshot.child("pickedCity").getValue().equals(bb)){
                                        guideName.setText(cc);
                                    }
                                }catch (NullPointerException e){
                                    Log.d(TAG, "NULL");
                                }
                                //          End of Exception

                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {

                            }
                        });

谢谢

【问题讨论】:

  • 您能否编辑您的问题以使您的问题/问题更加突出。目前我真的不明白你想要什么。
  • 你也应该删除这个问题或this one 因为再次发布同样的问题是一个非常糟糕的主意。相反,您应该改进您的问题。看看how to askmcve
  • 我需要在一个城市(即 Calp)注册的指南在用户选择该城市时全部显示。我想正确引用数据库节点,这就是我需要你帮助的原因。

标签: java android firebase firebase-realtime-database


【解决方案1】:

如果我只是在这里大声思考,请原谅我:

当他选择“升级”他/她的状态时,您为什么不将您的“用户”移动到“指南”,而不是复制它,无需使用按键,因为您可以轻松设置它uId 并且您的 Json 中没有重复数据。

然后,我将有一个节点“城市”(我认为在您当前的结构中是“邮政”,其属性和包含对应 uId 的城市指南列表/地图。

“城市”我相信您希望以编程方式并具有管理员写入权限,为此我会想出一个 Firebase 函数,使其具有管理员写入权限,一旦您推送“帖子”就会触发...

只是一个想法...

【讨论】:

  • 我编写代码的方式是,所有用户个人资料详细信息都与用户节点(用户个人资料详细信息、图像等)相关联。如果我要移动用户的详细信息以指导'而不是复制他们,则需要从头开始重做代码。
猜你喜欢
  • 2018-09-17
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
相关资源
最近更新 更多