Ant*_*sta 2 android firebase firebase-realtime-database
我有一个与如何使用Firebase保存用户信息有关的问题。我扩展了用户身份验证,并在json树上为用户创建了一个新节点,每个用户都有由firebase生成的自己的ID,并且用户信息位于该键/ ID中。问题是,每次我这样做时:
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
User user = snapshot.getValue(User.class);
if (number.equals(String.valueOf(user.getPhone()))) {
Log.d("here", "i entered");
key = snapshot.getKey();
userFriend = user;
}
}
Run Code Online (Sandbox Code Playgroud)
我将用户信息映射到代码中具有的用户模型中的键中,但是在我的项目的下一步中,我也需要具有特定用户的键。在这里,我只是映射没有密钥的用户信息。有没有一种方法可以在模型中添加字符串ID并自动将密钥添加到该ID字段?
userModel
package com.esmad.pdm.friendlymanager.model;
import java.util.ArrayList;
public class User {
private String id;
private String username;
private int age = -1;
private String phone;
private int gamesPlayed = 0;
private ArrayList<User> FriendList = new ArrayList<User>();
// CONSTRUCTOR
public User() {
}
public User(String username) {
this.username = username;
}
// GETTERS & SETTERS
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public User(String id, String username, int age, String phone, int gamesPlayed, ArrayList<User> users) {
this.username = username;
this.age = age;
this.phone = phone;
this.gamesPlayed = gamesPlayed;
this.FriendList = users;
}
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public int getGamesPlayed() { return gamesPlayed; }
public void setGamesPlayed(int gamesPlayed) { this.gamesPlayed = gamesPlayed; }
public ArrayList<User> getUsers() { return FriendList; }
public void setUsers(ArrayList<User> users) { this.FriendList = users; }
}
Run Code Online (Sandbox Code Playgroud)
调用时无法获取自动插入的快照的密钥snapshot.getValue(User.class)。
但是您可以轻松地添加一个额外的调用,以将密钥添加到User对象。首先,您需要添加一个getter和setter为id你的User类:
@Exclude
public String getId() { return id; }
@Exclude
public void setId(String id) { this.id = id; }
Run Code Online (Sandbox Code Playgroud)
如您可能已经注意到的,我用注释了这些@Exclude。这告诉数据库客户端在读取/写入数据库时忽略属性。没有注释,您还将id在数据库的每个用户节点中获得一个属性。
现在,您可以在读取属性值时简单地设置并获取密钥:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
User user = snapshot.getValue(User.class);
user.setId(snapshot.getKey());
System.out.println(user.getId());
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码段中,snapshot.getValue(User.class)获取具有所有常规属性的用户对象,然后user.setId(snapshot.getKey())将密钥添加到该对象。
回写数据库时,您还可以user.getId()用来确定写入位置:
ref.child(user.getId()).setValue(user);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |