我在项目中使用的是firbase,对它还很陌生。 我将用户联系人存储在用户ID下,这些联系人由用户选择,然后将它们推入数据库,因此用户每次可以添加多个联系人,而不会覆盖之前已经添加的现有联系人。我先将联系人添加到列表中,然后再推送它们,因此结果如下所示:
-OHffwMv2yiQKxZGOLVSkk3KZwlD3 //user_id
{
-UserContacts{
-LelbfUUJ2Kmy-sOrOF_{
-0{
phone_number: "phone number user added"}
}
-1{
phone_number: "phone number user added" }
-LelDGHq8EkNbHN54qqS{
-0{
phone_number: "another phone number" }
}
}
age: " "
email: "xxx@gmail.com"
images: ""
phone: "+xxxxxxxx"
username: "xxx"
}
问题是,我想从数据库中检索这些电话号码,我已经尝试了很多方法,但是我只是遇到转换错误或为空。
我尝试过:
FirebaseDatabase db;
DatabaseReference userdata;
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userid;
db = FirebaseDatabase.getInstance();
userdata= db.getReference("users");
userid= user.getUid();
userdata.child(userid).
child("UserContacts").
addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds: dataSnapshot.getChildren()){
ArrayList<String> contactlist=
(ArrayList<String>)ds.getValue();
String a= contactlist.get(0).toString();
Log.d(TAG,a);
}
} @Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
这里什么也没回来
我也尝试使用哈希映射而不是ArrayList
HashMap<String,String> contactlist(HashMap<String,String>)ds.getValue();
String a = contactlist.get("phone_number");
我在这里遇到转换错误。 这就是我用来推送联系人的代码。
Ref1.child(userId).child("UserContacts").push().setValue(c);
其中Ref1指向用户数据库,c指向包含我选择的联系人数量的列表
ArrayList<Contacts> c= new ArrayList<>();
...//here there is a for loop to read through the returned list of
//contacts
Contacts contact= new contact(selected_number);
c.add(contact);
//end of for Loop
Ref1.child(userId).child("UserContacts").push().setValue(c);
请帮助我获取一个字符串列表,其中包含存储在数据库中UserContacts下的电话号码。