新的网站和Android编程,所以我希望有人可以帮助我。我正在努力自我教导,并认为自己有点小菜。现在我更喜欢这个网站的消费者,但希望能成为一个贡献者。保存一个BigDecimal值为json
我在片段中创建了一个EditText,我想捕获一个美元金额/货币值。我正在尝试使用BigDecimal,但我很难实现。我有一个名为Transaction的类,我定义了getters和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库,唯一的数字类型是长或双。如果Double会给你合适的精度,那么就使用它。或者,您可能需要使用'toString()'方法来简单地将该值写为String。 – Squonk 2015-02-06 03:32:57
仅供参考,json.org库的master分支提交了一个提交[BigInteger和BigDecimal支持](https://github.com/douglascrockford/JSON-java/pull/135),所以期待它在未来的版本中。 – Will 2015-09-24 16:04:44