我有一个超级简单的界限:
JSONObject params = new JSONObject("{\"values\": { \"barcode\": \"testing\" } }");
Android工作室告诉我,这行'抛出JSONException',但为什么?我必须在这里做些蠢事。任何帮助表示赞赏
答案 0 :(得分:3)
JSONException是一个经过检查的例外。这意味着您需要有代码来处理它。您需要catch
例外或通过在您的方法上声明throws JSONException
让它冒出来。
Java中所有已检查的异常都是这种情况(除了扩展RuntimeException的异常之外的所有异常)。
在你的情况下,由于String是常量且正确的,我会做
} catch ( JSONException e) {
// should never happen
throw new IllegalArgumentException("unexpected parsing error",e);
}
这会将JSONException(如果出于某种原因,它确实发生)转换为(未经检查的)RuntimeException。
答案 1 :(得分:1)
public JSONObject(String source) throws JSONException {
this(new JSONTokener(source));
}
您正在使用上面的方法/构造函数来创建您的JSONObject及其在签名中的说法,它会抛出JSONException
,因此您不能简单地执行您所做的事情,
JSONObject params = new JSONObject("{\"values\": { \"barcode\": \"testing\" } }");
您需要在Java try- catch
中包含上面的行,因为方法签名明确指定了已检查的异常,因此您需要在try catch中处理它。
try{
JSONObject params = new JSONObject("{\"values\": { \"barcode\": \"testing\" } }");
}catch(JSONException ex){
//eat or rethrow your exception
}
您必须注意,还有其他JSONObject
构造函数没有指定任何已检查的异常,因此您可以像使用简单行一样使用它们,但是您尝试使用的那个指定了一个已检查的异常所以你需要处理 - 否则你的代码将无法编译。