我有一个Android应用程序,现在我在strings.xml资源文件中管理错误和成功消息。现在,如果我想要更改这些消息,我需要在strings.xml文件中进行更改,并在play-store中提供应用程序更新,这有点开销。相反,我希望从服务器端(后端)管理这些消息,以便可以在不进行任何更新的情况下更改它们。任何人都可以建议我实现这一目标的最佳方法。
答案 0 :(得分:0)
如果您使用的是Volley,那么这对您来说很有帮助
VolleyError实际上只是一个扩展的Exception,因此Exception.getMessage()可能不会返回您要查找的内容,除非您在扩展的Request类中覆盖解析VolleyError的解析方法。处理此问题的一个基本方法是执行以下操作:
//In your extended request class
@Override
protected VolleyError parseNetworkError(VolleyError volleyError){
if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){
VolleyError error = new VolleyError(new String(volleyError.networkResponse.data));
volleyError = error;
}
return volleyError;
}
}
如果将此添加到扩展的Request类中,则getMessage()至少应该不返回null。不过,我通常不会为此烦恼,因为从onErrorResponse(VolleyError e)方法中可以轻松完成所有操作。
你应该使用JSON库来简化事情 - 例如我使用Gson,或者你可以使用Apache的JSONObjects,它不需要额外的外部库。第一步是将从服务器发送的响应JSON作为String(以与我刚才演示的方式类似的方式),然后您可以选择将其转换为JSONObject(使用apache的JSONObjects和JsonArrays,或者您选择的另一个库)或者只是自己解析String。之后,您只需要显示Toast。
这里有一些示例代码可以帮助您入门:
public void onErrorResponse(VolleyError error) {
String json = null;
NetworkResponse response = error.networkResponse;
if(response != null && response.data != null){
switch(response.statusCode){
case 400:
json = new String(response.data);
json = trimMessage(json, "message");
if(json != null) displayMessage(json);
break;
}
//Additional cases
}
}
public String trimMessage(String json, String key){
String trimmedString = null;
try{
JSONObject obj = new JSONObject(json);
trimmedString = obj.getString(key);
} catch(JSONException e){
e.printStackTrace();
return null;
}
return trimmedString;
}
//Somewhere that has access to a context
public void displayMessage(String toastString){
Toast.makeText(context, toastString, Toast.LENGTH_LONG).show();
}