将BigDecimal值保存到json

时间:2015-02-06 03:09:05

标签: android json bigdecimal

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

我在片段中创建了一个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的正确语法。任何帮助或见解将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果要将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之间进行转换,您可以序列化整个对象并将其反序列化。