2015-02-06 2 views
1

사이트 및 Android 프로그래밍에 익숙하지 않으므로 누군가 나를 도울 수 있기를 바랍니다. 나는 스스로 가르치려고하고 자신을 약간의 멍청한 생각입니다. 지금은이 사이트를 더 많이 사용하지만 잘하면 기여자가 될 수 있습니다.BigDecimal 값을 json에 저장

달러 금액/통화 값을 캡처하려는 조각 내에서 EditText를 만들었습니다. BigDecimal을 사용하려고하는데 어려움을 겪고 있습니다. 나는 getters와 setter는 물론 JSON 객체를 정의한 Transaction이라는 클래스를 가지고있다.

public BigDecimal getAmount() { 
    return mAmount; 
} 

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

을 내 JSON을 저장하고 같은 외모를 검색 할 수 있습니다 : 예를 들어 내 getter 및 setter가 구현

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) { 

      } 

     }); 
: 내 조각 내 OnCreateView에서

json.put(JSON_AMOUNT, mAmount); 



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

을 내 글고 같이 보인다

내가 알아 내지 못하는 것은 mAmountField에 입력 한 값을 JSON Object에 저장하는 방법입니다. 문자열을 사용하면 (예제) :

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

그러나 BigDecimal에 대한 올바른 구문을 이해할 수 없습니다. 어떤 도움이나 통찰력이라도 대단히 감사하겠습니다. 미리 감사드립니다! 당신이 된 JSONObject에 문자열로 BigDecimal를 저장하려면

+0

Android 용 표준 org.json 라이브러리를 사용하는 경우 숫자 유형은 Long 또는 Double입니다. Double이 적합한 정밀도를 제공한다면이를 사용하십시오. 또는 단순히 값을 문자열로 쓰려면'toString()'메서드를 사용해야 할 수도 있습니다. – Squonk

+0

참고로, [BigInteger 및 BigDecimal 지원] (https://github.com/douglascrockford/JSON-java/pull/135)을 추가하는 json.org 라이브러리의 마스터 브랜치에 대한 커밋이 있으므로 기대하십시오 향후 릴리스에서. – Will

답변

0

당신이 있으며, toString()를 사용할 필요가

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

한 다음 값 다시

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

PS를 얻을하려는 경우. 당신은 optString() 대신 getString()을 사용할 수 있지만 기본값은 키가 존재하지 않기 때문에 설정할 수 있으므로 optString()을 사용하는 것이 좋습니다.

또 다른 제안은 Gson 라이브러리를 사용하여 json과 값 사이를 변환하는 것으로, 전체 객체를 직렬화하고 역 직렬화 할 수 있습니다.