【问题标题】:Saving a BigDecimal value to json将 BigDecimal 值保存到 json
【发布时间】:2015-02-06 03:09:04
【问题描述】:

网站和 Android 编程新手,所以我希望有人可以帮助我。我正在尝试自学,并且会认为自己有点像菜鸟。现在我更像是这个网站的消费者,但希望能成为贡献者。

我在 Fragment 中创建了一个 EditText,我想在其中捕获美元金额/货币价值。我正在尝试使用 BigDecimal,但很难实施。我有一个名为 Transaction 的类,我在其中定义了 getter 和 setter 以及我的 JSON 对象。例如,我的 getter 和 setter 已实现:

public BigDecimal getAmount() {
    return mAmount;
}   

public void setAmount(BigDecimal amount) {
    mAmount = amount;
}

我的 JSON 保存和检索看起来像:

json.put(JSON_AMOUNT, mAmount);



if (json.has(JSON_AMOUNT)) {
        mAmount = BigDecimal.valueOf(json.getDouble(JSON_AMOUNT));
}

在我的片段的 OnCreateView 中,我的 EditText 看起来像:

mAmountField = (EditText)v.findViewById(R.id.transaction_amount);
     mAmountField.setText((CharSequence) mTransaction.getAmount());
     mAmountField.addTextChangedListener(new TextWatcher() {

         DecimalFormat dec = new DecimalFormat("0.00");

         public void onTextChanged(CharSequence s, int start, int before, int count) {
             if (!s.toString().matches("\\$(d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$")) {
                 String userInput = "" + s.toString().replaceAll("[^\\d]", "");
                 if (userInput.length() > 0) {
                     Float in = Float.parseFloat(userInput);
                     float percent = in/100;
                     mAmountField.setText("$" + dec.format(percent));
                     mAmountField.setSelection(mAmountField.getText().length());
                 }

                 mTransaction.setAmount(BigDecimal.valueOf());

                }

            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            public void afterTextChanged(Editable s) {

            }

        });

我不知道如何将 mAmountField 输入的值保存到我的 JSON 对象中。我只使用字符串(例如):

    public void onTextChanged(CharSequence s, int start, int before, int count) {
        mTransaction.setDetails(s.toString());
    }

但我不知道 BigDecimal 的正确语法。任何帮助或见解将不胜感激。提前致谢!

【问题讨论】:

  • 如果您使用的是适用于 Android 的标准 org.json 库,则唯一的数字类型是 Long 或 Double。如果 Double 会给你合适的精度,那么就使用它。或者,您可能需要使用toString() 方法来简单地将值写入字符串。
  • 仅供参考,在 json.org 库的 master 分支中有一个提交,添加了 BigInteger and BigDecimal support,所以期待在未来的版本中。

标签: android json bigdecimal


【解决方案1】:

如果你想将 BigDecimal 作为字符串保存到 JsonObject 你需要使用 toString()

json.put(JSON_AMOUNT, mAmount.toString());

然后当你想取回价值时

BigDecimal mAmount= new BigDecimal(json.optString(JSON_AMOUNT,"0"));

ps。您可以使用 getString() 代替 optString() 但我推荐 optString() 因为您可以设置默认值是键不存在。

另一个建议是使用 Gson 库在 json 和 value 之间进行转换,您可以序列化整个对象并将其反序列化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2014-11-16
    • 2016-07-07
    相关资源
    最近更新 更多