You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:05:24