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

点击单选按钮应用崩溃:疑变量声明问题,附Logcat报错

问题排查与修复方案

咱们先从你贴的代码里找最直接的问题——amount变量的赋值完全错了,这大概率是导致崩溃的核心原因:

Double amount = 0.0;
amount.valueOf(textTotalPrice.toString());

这里有两个致命问题:

  1. valueOf是Double类的静态方法,不能用实例对象amount去调用,而且你根本没把返回值赋值给amount,所以amount一直是初始的0.0,后续的余额判断逻辑完全失效。
  2. textTotalPrice.toString()拿的是TextView这个控件对象的字符串标识(类似android.widget.TextView@abc123),不是你要的价格文本内容,得用textTotalPrice.getText().toString()才能拿到用户看到的价格。

所以这段代码必须改成这样,还要加异常处理防止输入不是数字的情况:

Double amount = 0.0;
try {
    amount = Double.valueOf(textTotalPrice.getText().toString());
} catch (NumberFormatException e) {
    Toast.makeText(Cart.this, "请输入有效的价格", Toast.LENGTH_SHORT).show();
    return; // 直接终止后续逻辑,避免崩溃
}

然后看你提供的Logcat错误:

2020-01-30 11:56:15.100 3255-3749/? E/DatabaseUtils: Writing exception to parcel
java.lang.IllegalArgumentException: You cannot keep your settings in the secure settings.
at com.android.providers.settings.SettingsProvider.warnOrThrowForUndesiredSecureSettingsMutationForTargetSdk(SettingsProvider.java:2105)
...

这个错误和你当前的订单提交代码没关系,是系统设置服务抛出的异常,说明你的应用里(或者依赖的第三方库)有代码在尝试修改系统的安全设置(比如调用Settings.Secure.putXXX()这类方法),你可以排查下其他模块的代码。

另外给你提个小优化点:更新Firebase余额后,你不需要再查一次数据库更新Common.currentUser,直接在内存里改就行,省一次网络请求:

if (task.isSuccessful()) {
    // 直接更新内存中的用户对象,不用再查数据库
    Common.currentUser.setBalance(balance);
}

最后建议你测试时抓完整的崩溃Logcat,当前的这个错误栈和你点击单选按钮的崩溃应该不相关,找到对应你应用进程的异常信息,能更快定位问题。

内容的提问来源于stack exchange,提问作者KDD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:12:48