网站和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的正确语法。任何帮助或见解将不胜感激。提前谢谢!
答案 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之间进行转换,您可以序列化整个对象并将其反序列化。