我正在使用另一个带有构造函数的类向数据库写入数据,但我仍然需要从数据库读取数据。在文档中,当使用其他类时,需要为每个元素创建HashMap列表,但我有2个类(因为我需要向数据库写入超过255个条目),我将不得不写一个HashMap。我如何加载一个DB变量的名称,它与文件本身的名称相同?例如,int b = 0;
和数据库中的-b: 0
,以及如何从数据库中获取每个变量的值?我这样发送数据:
if (user != null) {
if(database.child(getEmail)==null) {
User newUser = new User(getEmail, coins, ....);
User1 newUser1 = new User1(a256, a257, ....);
database.child(getEmail).push().setValue(newUser1);
database.child(getEmail).push().setValue(newUser);
}
我读到这样的数据:
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot ds : snapshot.getChildren()){
User user = ds.getValue(User.class);
//saving information witch will read from db in SharedPreferences
PreferenceConfig.GetEmail(getApplicationContext(), getEmail);
PreferenceConfig.GetCoin(getApplicationContext(), getEmail);
PreferenceConfig.GetA256(getApplicationContext(), a256);
...
}
}
database.addValueEventListener(valueEventListener);
但是我不明白如果没有hashmap JSON文件,我如何从db中获取数据:
{
"User": {
"mail@gmail:com": {
"-NHTVinbEVUAqJwK8Umt": {
"getEmail": "mail@gmail.com",
"coins": 100,
.....
},
"-NHTVinpCPOJ4UPZvgpN": {
"a256":0,
"a257":0
...............
}
}
}
}
1条答案
按热度按时间ryevplcw1#
您将无法读取动态创建的字段下的数据:
如果您的第二个子项与第一个子项具有相同的字段,则您将能够读取所有数据:
现在,要从这样的结构中读取数据,必须创建一个指向
mail@gmail:com
节点的引用,并进行get()
调用,如以下代码行所示:logcat中的结果为:
或者,您可以将每个
DataSnapshot
对象Map到User
类型的对象:仅当
User
类包含两个名为getEmail
和coins
的字段时,此操作才有效。第一个字段是字符串,第二个字段是数字。