2014-10-07 63 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

相关问题