2014-10-07 48 views
2

我有一個驗證領域的功能,其返回的JSONObject在strings.xml中返回的隨機數,而不是字符串值中的JSONObject

private JSONObject validateFields(String field){ 
    JSONObject returnData = new JSONObject(); 

    try{ 
     if (field == "description"){ 
      if (expensesDescription.length() < 1){ 
       returnData.put("returnCode",0); 
       returnData.put("returnMessage",R.string.expenses_description_validation_length); 
      }else{ 
       returnData.put("returnCode",1); 
      } 
     } 

    }catch (JSONException e) { 
     Log.e(FILE_NAME, "An error has occurred: " + e.toString(), e); 
    } 

    return returnData; 
} 

,你可以看到,我把一個字符串資源的引用爲returnMessage 。爲以防萬一,字符串資源是:

<string name="expenses_description_validation_length">Please enter your expenses\' description.</string> 

好了,所以這裏是我如何調用該函數

private JSONObject dataValidation = new JSONObject(); 
dataValidation = validateFields("description"); 
if (Integer.parseInt(dataValidation.getString("returnCode")) == 0){ 
    Toast.makeText(getActivity(), dataValidation.getString("returnMessage"), Toast.LENGTH_SHORT).show(); 
} 

但問題是顯示錯誤消息的敬酒,而不是,它會顯示一個號碼「2131427350 」。這裏有什麼問題?

通過,如果我改變returnMessage在validateFields功能類似

returnData.put("returnMessage","some error lalala"); 

正確的「某些錯誤LALALA」消息的方式將顯示。

+0

'R.string.expenses_description_validation_length'是一個標識符,而不是一個字符串。使用'Context.getString'來獲取字符串值。 – njzk2 2014-10-07 15:05:13

回答

2

這裏

returnData.put("returnMessage",R.string.expenses_description_validation_length); 

要設置一個資源爲returnMessages關鍵,所以你的麪包應該像

int resId = Integer.parseInt(dataValidation.getString("returnMessage")); 
Toast.makeText(getActivity(), getActivity().getString(resId), Toast.LENGTH_SHORT).show(); 

這樣的資源ID,你把JSON轉換回本地化的字符串

+0

我試過了你的答案,它顯示錯誤「Can not resolve method'getString(java.lang.String)'。但是如果我做了Toast.makeText(getActivity(),getActivity().getString(R.string.expenses_description_validation_length), Toast.LENGTH_SHORT).show();它工作。 – imin 2014-10-07 15:34:05

+0

我的不好,我編輯我的答案 – Blackbelt 2014-10-07 15:36:43

相關問題