【问题标题】:How do I get the parent value from child in Firebase real time database?如何从 Firebase 实时数据库中的子项获取父值?
【发布时间】:2020-04-22 22:14:34
【问题描述】:

我正在尝试开发与学校相关的应用程序。这是我的数据库的图片。在我的代码中,我将 schoolEmail 作为字符串(即字符串电子邮件 = iisd@gmail.com)。我想用这个字符串知道这封邮件属于哪个学校(在这种情况下是IISD)我想把这个值作为字符串。

请看这张照片

1

这是我的代码

public class HomeScreen extends AppCompatActivity {

    TextView schoolName,schoolEmail,schoolPhone,schoolAddress;
    Button logoutSchool;
    DatabaseReference databaseReference;
    String email;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_screen);
        schoolName = findViewById(R.id.schoolName);
        schoolEmail = findViewById(R.id.schoolEmail);
        schoolPhone = findViewById(R.id.schoolPhone);
        schoolAddress = findViewById(R.id.schoolAddress);
        logoutSchool = findViewById(R.id.loginSchool);
        databaseReference =         FirebaseDatabase.getInstance().getReference();
        email = "iisd@gmail.com";

        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // This method is called once with the initial value and again
                // whenever data at this location is updated.
                DataSnapshot dataSnapshot1 = dataSnapshot.getChildren();
                String value = dataSnapshot.child("Schools").getKey();

                Toast.makeText(HomeScreen.this, value, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onCancelled(DatabaseError error) {

            }
        });
    }
}

【问题讨论】:

  • 所以你想让IISD依赖于学校,并且在此之下,它会有某些信息?
  • “学校”将保持不变,所有学校都将添加到其中。我想添加更多的学校,每个学校都会有一个email,所以我想用这个email来获取学校名称

标签: android firebase firebase-realtime-database firebase-authentication


【解决方案1】:

尝试以下方法:

        databaseReference.child("Schools").orderByChild("schoolEmail").equalTo("iisd@gmail.com").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot ds : dataSnapshot.getChildren()){
                    String value = ds.getKey();
                    Toast.makeText(HomeScreen.this, value, Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onCancelled(DatabaseError error) {
                throw databaseError.toException();
            }
        });

这里你的参考在节点Schools,然后你使用查询orderByChild("schoolEmail").equalTo("iisd@gmail.com")来检查schoolEmail = email_value,然后使用for循环你可以获得密钥。

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 2020-05-12
    • 1970-01-01
    • 2021-01-25
    • 2020-04-27
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多