java - 如何从 Firebase 获取特定的子值?
问题描述
我只想获取player1Name
并分配给 String player1Name
。但我null
从下面的代码中得到,请帮忙!
Firebase 基本设置:100% 在这部分工作
UserId = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference gameInfoRef = rootRef.child("user").child(UserId).child("gameInfo");
gameKey = "LMr4xql36nPZFvyX5n9";
ValueEventListener
:
gameInfoRef.child(gameKey).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
TextView tv_player1Name = findViewById(R.id.tv_player1Name);
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Game game = ds.child(gameKey).getValue(Game.class);
player1Name = ds.child("player1Name").getValue(String.class);
}
System.out.println(ds.child(gameKey).getValue() +" =All Data");
}
});
System.out.println
:
09-20 21:38:14.980 4274-4274/viwil.mahjongcal I/System.out: null All Data
这也不起作用:
player1Name = game.getPlayer1Name()
错误:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String viwil.mahjongcal.Game.getPlayer2Name()”
当我改变这条线
gameInfoRef.child(gameKey).addValueEventListener(new ValueEventListener() {
到
gameInfoRef.addValueEventListener(new ValueEventListener() {
System.out.println
将打印所有数据(包括我想要的字符串)gameKey
,但我想player1Name
在我指定的内部child("gameKey")
,请帮忙。
解决方案
该方法生成的 id以(减号)push()
开头。-
所以要解决这个问题,请更改以下代码行:
gameKey = "LMr4xql36nPZFvyX5n9";
到
gameKey = "-LMr4xql36nPZFvyX5n9";
// ^
并且当您使用对该特定 id 的直接引用时,无需遍历DataSnapshot
对象 usinggetChildren()
方法,您可以简单地从其中获取值。因此,删除该 for 循环并仅使用以下代码行:
Game game = dataSnapshot.getValue(Game.class);
Log.d(TAG, game.getPlayer1Name());
您的 logcat 中的结果将是:
testttggg
推荐阅读
- c++ - 写/读简单二进制文件的奇怪行为
- javascript - 如何根据 Chrome 扩展中的用户选项修改 http 请求标头?
- javascript - 提交表单时手动刷新 React 中的页面
- javascript - 如何使用反应获取文本输入字段的值
- swift - 仍然无法删除 tableviewcells
- python - 无法使用 pyside Qprocess 启动 exe 文件
- c - 使用 clang 从 C 代码生成 SIMD 代码
- python - 如何评估 XGboost 给出的预测概率?
- angular - 上传到 S3 存储桶的图像在浏览器上不可见
- dart - 当内容类型设置为 text/html 时,Dart http 服务器冻结