Firestore中单选按钮响应无法更新的Java开发问题求助
问题解决:Firestore无法更新单选按钮响应
核心错误分析
你代码里有个致命的低级错误:获取no选项文本时,错误引用了yesButton,导致无论用户选yes还是no,最终存入Firestore的都是yes按钮的文本。用户修改选项后,数据库里的值看起来没变化,本质是两次存的内容完全一致。
// 错误代码 String no = yesButton.getText().toString(); // 正确写法 String no = noButton.getText().toString();
修正后的完整代码方案
方案1:使用set方法并开启合并模式(推荐,避免覆盖文档其他字段)
这种方式会只更新指定字段,不会覆盖用户文档中已存在的其他数据:
buttonfor.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 正确获取两个选项的文本 String yes = yesButton.getText().toString(); String no = noButton.getText().toString(); Map<String, Object> userResponse = new HashMap<>(); int checkedId = radioGroup.getCheckedRadioButtonId(); if (checkedId == R.id.question_a1) { userResponse.put("I am willing to participate", yes); } else if (checkedId == R.id.question_a2) { userResponse.put("I am willing to participate", no); } String userID = fAuth.getCurrentUser().getUid(); fStore.collection("users").document(userID) .set(userResponse, SetOptions.merge()) .addOnSuccessListener(aVoid -> { Toast.makeText(question.this, "用户响应已保存", Toast.LENGTH_SHORT).show(); }) .addOnFailureListener(e -> { Toast.makeText(question.this, "错误!", Toast.LENGTH_SHORT).show(); Log.d(TAG, e.toString()); }); } });
方案2:使用update方法(适用于文档已存在的场景)
如果确定用户文档已经创建(首次保存后必然存在),可以直接用update方法,它只会更新指定字段:
// 替换上述代码中的set部分 fStore.collection("users").document(userID) .update(userResponse) .addOnSuccessListener(aVoid -> { Toast.makeText(question.this, "用户响应已更新", Toast.LENGTH_SHORT).show(); }) .addOnFailureListener(e -> { Toast.makeText(question.this, "错误!", Toast.LENGTH_SHORT).show(); Log.d(TAG, e.toString()); });
额外检查项
- 确认
radioGroup已正确绑定布局中的单选按钮组,保证getCheckedRadioButtonId()能准确获取选中项ID - 确保用户已成功登录,
fAuth.getCurrentUser()不为null,避免空指针异常
内容的提问来源于stack exchange,提问作者swiftlearneer
相关产品推荐
相关产品推荐

