gpt4 book ai didi

android - 在 Android 上查询 Firebase

转载 作者:行者123 更新时间:2023-11-29 17:28:02 25 4
gpt4 key购买 nike

这是我的数据:

{
"users" : {
"00c49c66-7ac8-9a48-7c4541d8bac6" : {
"email" : "d@gmail.com",
"gender" : "m",
"name" : "deepak",
"user_id" : "00c49c66-7ac8-9a48-7c4541d8bac6"
},
"1cb9c1de-1fcf-a2cc-bf78c84e03c8" : {
"email" : "e@gmail.com",
"gender" : "f",
"name" : "ekta",
"user_id" : "1cb9c1de-1fcf-a2cc-bf78c84e03c8"
},
"38211c3f-6c48-8987-0c698b9b9b52" : {
"email" : "c@gmail.com",
"gender" : "m",
"name" : "chirag",
"user_id" : "38211c3f-6c48-8987-0c698b9b9b52"
},
"a536cf1f-419f-9658-cfb5f5a8ec78" : {
"email" : "a@gmail.com",
"gender" : "m",
"name" : "aniket",
"user_id" : "a536cf1f-419f-9658-cfb5f5a8ec78"
},
"c80d828d-48d7-a79a-9cc558cd1960" : {
"email" : "b@gmail.com",
"gender" : "f",
"name" : "bhakti",
"user_id" : "c80d828d-48d7-a79a-9cc558cd1960"
}
}
}

现在我想获取“name”和“id”,其中“gender”是“m”

谁能告诉我如何从 Android 客户端向 firebase 发送这样的查询。

我尝试了 firebase 提供的教程和其他一些链接,但没有通过。

大多数解决方案都是用 Javascript 编写的,我需要在 firebase 的 java api 中为 Android 使用它。

我试过了

public class ActivityHome extends Activity {
String strLoggedInUserID;
TextView tvData;
Firebase fbRef = new Firebase("https://myurl.com/users");


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);

tvData = (TextView) findViewById(R.id.tvData);

Query queryRef = fbRef.orderByChild("gender").equalTo("m");

Bundle extras = getIntent().getExtras();
strLoggedInUserID = extras.getString("userID");

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

}

@Override
public void onCancelled(FirebaseError firebaseError) {

}
});

queryRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {

//long longChildCount = dataSnapshot.getChildrenCount();

// tvData.setText(dataSnapshot).toString();
tvData.setText(s);

}

@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {

//tvData.setText(s);

}

@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {

}

@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {

}

@Override
public void onCancelled(FirebaseError firebaseError) {

}
});

}
}

最佳答案

您的查询代码看起来是正确的,但您没有打印用户。

由于您要添加一个 ChildEventListener,因此将为每个 child 调用它:

queryRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {

//long longChildCount = dataSnapshot.getChildrenCount();

// tvData.setText(dataSnapshot).toString();
tvData.setText(s);

}

dataSnapshot 参数包含有关单个用户的信息。要打印他们的 key 、姓名和电子邮件:

queryRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
System.out.println(dataSnapshot.key());
System.out.println(dataSnapshot.child("name").getValue());
System.out.println(dataSnapshot.child("email").getValue());
}

或者,您可以使用 ValueEventListener 同时收听所有子级。

private static class User {
String email;
String gender;
String name;
@JsonProperty("user_id")
String userId;

public String getEmail() { return email; }
public String getGender() { return gender; }
public String getName() { return name; }
public String getUserId() { return userId; }
}
queryRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child: dataSnapshot.getChildren()) {
User user = child.getValue(User.class);
System.out.println(user.getEmail());
}
}

@Override
public void onCancelled(FirebaseError firebaseError) {
}
});

在最后一个 fragment 中,我还使用了一个 User 类来从 DataSnapshot 获取数据。随着应用程序的增长,这将比不断调用 DataSnapshot.child() 更方便。

这包含在 section on reading data in the Firebase documentation 中.

关于android - 在 Android 上查询 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33956282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com