处理错误和成功消息的最佳方式是从后端复制文本



我有一个Android应用程序,现在我正在strings.xml资源文件中管理错误和成功消息。现在,如果我想更改这些消息,我需要在strings.xml文件中进行更改,并在播放商店中提供应用程序更新,这有点开销。相反,我希望从服务器端(后端)管理这些消息,这样它们就可以在没有任何更新的情况下进行更改。谁能告诉我实现这一目标的最佳方法吗。

如果你正在使用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的JSONObject,它不需要额外的外部库。第一步是将服务器发送的响应JSON作为字符串(与我刚才演示的方式类似),接下来您可以选择将其转换为JSONObject(使用apache的JSONObjects和JsonArrays,或您选择的另一个库),也可以自己解析字符串。之后,您只需要显示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();
}

相关内容

最新更新