【发布时间】: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