【发布时间】:2015-06-30 22:17:55
【问题描述】:
对于下面的代码,有没有比为JSONException 设置多个嵌套try-catch 块更优雅的解决方案?
我嵌套它们的原因是因为如果解析中出现一个错误,我不想让其余的解析停止。我希望每个人都彼此独立。
if (obj.has(GlobalVars.KEY_DESC)) {
try {
JSONObject descObj = obj.getJSONObject(GlobalVars.KEY_DESC);
if (descObj.has(GlobalVars.KEY_COUNTRY)) {
try {
description.put(GlobalVars.KEY_COUNTRY, descObj.getString(GlobalVars.KEY_COUNTRY));
}
catch (JSONException e) { e.printStackTrace(); }
}
if (descObj.has(GlobalVars.KEY_CITY)) {
try {
description.put(GlobalVars.KEY_COUNTRY, descObj.getString(GlobalVars.KEY_CITY));
}
catch (JSONException e) { e.printStackTrace(); }
}
if (descObj.has(GlobalVars.KEY_POSTAL)) {
try {
description.put(GlobalVars.KEY_COUNTRY, descObj.getString(GlobalVars.KEY_POSTAL));
}
catch (JSONException e) { e.printStackTrace(); }
}
if (descObj.has(GlobalVars.KEY_STREET)) {
try {
description.put(GlobalVars.KEY_COUNTRY, descObj.getString(GlobalVars.KEY_STREET));
}
catch (JSONException e) { e.printStackTrace(); }
}
if (descObj.has(GlobalVars.KEY_SUBSTREET)) {
try {
description.put(GlobalVars.KEY_COUNTRY, descObj.getString(GlobalVars.KEY_SUBSTREET));
}
catch (JSONException e) { e.printStackTrace(); }
}
if (descObj.has(GlobalVars.KEY_YEAR)) {
try {
description.put(GlobalVars.KEY_COUNTRY, descObj.getInt(GlobalVars.KEY_YEAR));
}
catch (JSONException e) { e.printStackTrace(); }
}
if (descObj.has(GlobalVars.KEY_SQUARE_METERS)) {
try {
description.put(GlobalVars.KEY_COUNTRY, descObj.getInt(GlobalVars.KEY_SQUARE_METERS));
}
catch (JSONException e) { e.printStackTrace(); }
}
}
catch (JSONException e) { e.printStackTrace(); }
}
【问题讨论】:
-
如果您不关心异常,请使用返回类型适当地制作单个方法和参数。方法的参数将是您在上述代码中用于查找的 KEY。
-
您要检查每个字段是否继续,否则停止解析?
-
@Nambari 我确实关心异常。我想看看日志中出了什么问题。
-
@SafwanHijazi 我希望每个键解析都相互独立。因此,如果它缺少一个键,我希望它继续。
-
您可以简单地登录,我的建议仍然有效。
标签: java android json try-catch