如何在Android Studio中通过Firebase将值从false改为true并保存
修正后的Firebase节点修改代码
你的代码存在两个关键问题:
- 路径冗余:
databaseReference已经指向CurrentUser/{uid}/MyOrder,后续又追加child(firebaseUser.getUid())会导致路径错误,变成CurrentUser/{uid}/MyOrder/{uid} - 空节点指定:
child("")没有指向任何有效节点,必须明确要修改的目标节点键名
场景1:直接修改MyOrder节点的值(假设该节点本身是布尔类型)
如果CurrentUser/{uid}/MyOrder就是你要修改的目标节点,直接对databaseReference调用setValue即可,注意用布尔值true而非字符串(如果原数据是布尔型false):
databaseReference = FirebaseDatabase.getInstance().getReference("CurrentUser") .child(firebaseUser.getUid()) .child("MyOrder"); databaseReference.setValue(true).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { // 修改成功,可添加提示或日志 Log.d("Firebase", "节点值修改成功"); } else { // 修改失败,打印错误信息 Log.e("Firebase", "修改失败", task.getException()); } } });
场景2:修改MyOrder下的子节点(比如目标节点是MyOrder/isCompleted)
如果要修改的是MyOrder下的某个具体子节点,需要明确指定子节点的键名:
databaseReference = FirebaseDatabase.getInstance().getReference("CurrentUser") .child(firebaseUser.getUid()) .child("MyOrder"); // 替换"isCompleted"为你实际要修改的子节点键名 databaseReference.child("isCompleted").setValue(true).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d("Firebase", "子节点值修改成功"); } else { Log.e("Firebase", "修改失败", task.getException()); } } });
注意事项
- 确保Firebase数据库规则允许该操作(比如读写权限配置正确)
- 如果原节点值是字符串类型的
"false",则setValue时传入"true"(字符串)而非布尔值
内容的提问来源于stack exchange,提问作者kyu
相关产品推荐
相关产品推荐

