如何使用android在firebase数据库中执行连接查询
在这里,组中成员的密钥是用户的密钥。 任务:要根据组的成员密钥从如何使用android在firebase数据库中执行连接查询,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,在这里,组中成员的密钥是用户的密钥。 任务:要根据组的成员密钥从此处输入codem用户获取comida_id。 在这里,我们试图首先从组中获取成员密钥。在获取成员密钥的同时,我们还希望在成员循环进行时获取用户和用户的comida_id。所以这个场景将是我们首先根据组的键(例如createTime、groupName、members)从组中获取所有键。现在,我们将在成员上执行循环,从而获得成员的密钥。现在,在该循环中获取该成员的密钥时,我们希望从用户的密钥中获取comida_id,该id将仅在该循
此处输入code
m用户获取comida_id。
在这里,我们试图首先从组中获取成员密钥。在获取成员密钥的同时,我们还希望在成员循环进行时获取用户和用户的comida_id。所以这个场景将是我们首先根据组的键(例如createTime、groupName、members)从组中获取所有键。现在,我们将在成员上执行循环,从而获得成员的密钥。现在,在该循环中获取该成员的密钥时,我们希望从用户的密钥中获取comida_id,该id将仅在该循环中获取
GroupKey->获取数据(createTime、groupName、成员、餐厅)->获取成员密钥和comida_id(在循环中(获取成员密钥然后获取comida_id))
*我的代码
FirebaseDatabase mDatabase_gp = FirebaseDatabase.getInstance();
mDatabase_gp.getReference("Group/"+group_key).addValueEventListener(
new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
Map<String, Object> valuesMap = (HashMap<String, Object>) dataSnapshot.getValue();
Map userkey = (Map) valuesMap.get("members");
Log.d("Members", String.valueOf(userkey));
for (Object ke: userkey.keySet())
{
Log.d("runfirst","First Run");
String key = String.valueOf(ke.toString());
Log.d("Member key",key);
// HERE WHAT CORRESPONDS TO JOIN
FirebaseDatabase User = FirebaseDatabase.getInstance();
User.getReference("User/"+key).addValueEventListener(
new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
Map<String, Object> valuesMap = (HashMap<String, Object>) dataSnapshot.getValue();
String userid = String.valueOf(valuesMap.get("comida_id"));
Log.d("comida_id",userid);
Toast.makeText(ChatSectionActivity.this,userid,Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
}
);
}
Log.d("runlast","Last Run");
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
}
);
Firebase没有联接查询。你做错的是你在Fireabasueser上引用你的数据库,这是错误的
mdatabaseReference.child("Answer").child("Answer"+QID).orderByChild("questionId").equalTo(QID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (muftiAnswer_List.size() > 0)
muftiAnswer_List.clear();
for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {
final AnswerClass muftiAnswer = postsnapshot.getValue(AnswerClass.class);
String ide=muftiAnswer.getMuftiId(); //getting AlimId From Class object
Log.e(TAG, "Alim:"+ muftiAnswer.getMuftiId());
//Using Query to get Alim Name From Data Table.!
mdatabaseReference.child("users").child("Alim").child(ide).addListenerForSingleValueEvent(new ValueEventListener() {
@Override //.orderByChild("alimId").equalTo(user_Id)
public void onDataChange(DataSnapshot dataSnapshot) {
Log.e(TAG, "AlimNode:");
for(DataSnapshot postSnapshot:dataSnapshot.getChildren())
{
Log.e(TAG, "EqualNode:");
if(postSnapshot.getKey().equals("alimName"))
{
Log.e(TAG, "AlimNameNodeSnapShot:");
//Setting Alim Name in Current Object replcing id for name
muftiAnswer.setMuftiId(postSnapshot.getValue().toString());
}
// resultMuftiAnswer_List.add(muftiAnswer);
}//End of snapshot
}//ondata Change
@Override
public void onCancelled(DatabaseError databaseError) {
// Failed to read value
Log.w(TAG, "Failed to read value.", databaseError.toException());
}
});//End OF Alim Query
}//end of comments
circular_progress2.setVisibility(View.GONE);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(Details_Activity.this, "LOLOLOL", Toast.LENGTH_SHORT).show();
}
});
您必须使用嵌套循环进行连接,如MYSQL
Query query = reference.child("issue").orderByChild("id").equalTo(0);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
// dataSnapshot is the "issue" node with all children with id 0
for (DataSnapshot issue : dataSnapshot.getChildren()) {
// do something with the individual "issues"
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
访问链接以了解更多信息
Firebase没有联接查询。你做错的是你在Fireabasueser上引用你的数据库,这是错误的
mdatabaseReference.child("Answer").child("Answer"+QID).orderByChild("questionId").equalTo(QID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (muftiAnswer_List.size() > 0)
muftiAnswer_List.clear();
for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {
final AnswerClass muftiAnswer = postsnapshot.getValue(AnswerClass.class);
String ide=muftiAnswer.getMuftiId(); //getting AlimId From Class object
Log.e(TAG, "Alim:"+ muftiAnswer.getMuftiId());
//Using Query to get Alim Name From Data Table.!
mdatabaseReference.child("users").child("Alim").child(ide).addListenerForSingleValueEvent(new ValueEventListener() {
@Override //.orderByChild("alimId").equalTo(user_Id)
public void onDataChange(DataSnapshot dataSnapshot) {
Log.e(TAG, "AlimNode:");
for(DataSnapshot postSnapshot:dataSnapshot.getChildren())
{
Log.e(TAG, "EqualNode:");
if(postSnapshot.getKey().equals("alimName"))
{
Log.e(TAG, "AlimNameNodeSnapShot:");
//Setting Alim Name in Current Object replcing id for name
muftiAnswer.setMuftiId(postSnapshot.getValue().toString());
}
// resultMuftiAnswer_List.add(muftiAnswer);
}//End of snapshot
}//ondata Change
@Override
public void onCancelled(DatabaseError databaseError) {
// Failed to read value
Log.w(TAG, "Failed to read value.", databaseError.toException());
}
});//End OF Alim Query
}//end of comments
circular_progress2.setVisibility(View.GONE);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(Details_Activity.this, "LOLOLOL", Toast.LENGTH_SHORT).show();
}
});
您必须使用嵌套循环进行连接,如MYSQL
Query query = reference.child("issue").orderByChild("id").equalTo(0);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
// dataSnapshot is the "issue" node with all children with id 0
for (DataSnapshot issue : dataSnapshot.getChildren()) {
// do something with the individual "issues"
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
访问链接以了解更多信息
添加数据库结构JSON。?感谢回复转到此链接您可以看到数据库图像添加数据库结构JSON。?感谢回复转到此链接您可以看到数据库图像感谢回复,如何在查询下执行查询-如果您理解我的问题。实际上,在第一次查询中,从组中获取成员键的列表,那个时我用于循环,当每个键获取时,然后创建对该实例的查询,我从用户选项卡中获取该键信息。请帮帮我point@DipeshKhatate请检查答案谢谢,实际上查询没有得到确切的答案。我想做的是,当调用第一个循环时,我从该键中获取一个键,我想使用该键进行另一个查询并获取值。但现在我先获取所有密钥,然后它会查询另一个循环,请查看此链接上的数据库-在上面的示例中,您将获得一个ide,然后使用该ide从firebase获取更多数据,如果您正在获取所有数据,只需使用postSnapshot获取每个循环的所有数据,并获取您所需的唯一密钥,这也没关系want@DipeshKhatatefor(DataSnapshot postSnapshot:DataSnapshot.getChildren()){Log.e(标记“EqualNode:”);if(postSnapshot.getKey().equals(“alimName”)){Log.e(标记“AlimNameNodeSnapShot:”);//在当前对象应答id中为名称muftiAnswer.setMuftiId(postSnapshot.getValue().toString());}感谢您的回复,如果您理解我的问题,如何在查询下执行查询?实际上,在第一次查询中,从组中获取成员密钥列表,在每次获取密钥时,我都用于循环,然后创建对该实例的查询,我从用户选项卡中获取了该密钥信息艾尔,请帮帮我point@DipeshKhatate请检查答案谢谢,实际上查询没有得到确切的答案。我想做的是,当调用第一个循环时,我从该键中获取一个键,我想使用该键进行另一个查询并获取值。但现在我首先获取所有键,然后再查询另一个键op请查看此链接上的数据库-在上面的示例中,您获得了一个ide,然后使用该ide从firebase获取进一步的数据,如果您获得的所有数据仅用于postSnapshot的每个循环,并获取您需要的唯一密钥,那么这是可以的want@DipeshKhatate对于(DataSnapshot postSnapshot:DataSnapshot.getChildren()){Log.e(标记,“EqualNode:”);if(postSnapshot.getKey().equals(“alimName”){Log.e(标记,“AlimNameNodeSnapShot:”);//为名称muftiAnswer.setMuftiId(postSnapshot.getValue().toString())在当前对象应答id中设置ALM名称;}