我需要完成的工作很简单 - 我使用OKHttp从我的服务器获取JSON编码的响应,我需要解析一个简单的(一维)JSON响应来提取单个值。
我写了一段简单的代码片段,但是我收到了错误。
以下是OKHttpClient的代码,如果重要的话:
OkHttpClient client = new OkHttpClient();
RequestBody formVars = new FormBody.Builder().add(..vars..).build();
Request request = new Request.Builder().url(url).post(formVars).build();
Response response = null;
try {
response = client.newCall(request).execute();
JSONObject jj = new JSONObject((Map) response.body());
String e = jj.getString("status");
} catch {
...
}
我得到的错误(红线)位于jj.getString("status");
:
Unhandled exception: org.json.JSONException
JSON字符串很简单
{"status":"1"}
答案 0 :(得分:2)
您忘记将该响应转换为字符串。您需要做的就是:
String stringResponse = response.body().string();
JSONObject jj = new JSONObject(stringResponse);
答案 1 :(得分:0)
抛出JSONException
将以上行添加到您的方法中。并将您的响应转换为String。
JSONObject objJsonObject = new JSONObject(response.body().toString());
System.out.println(objJsonObject.getString("status"));
你的捕获块也是错误的。如果这里的投掷不正确,那么这将是正确的声明。尝试和捕获块。如果需要,最后添加。
try {
} catch (JSONException e) {
// TODO: handle exception
}
答案 2 :(得分:0)
更改catch子句以捕获这样的异常:
try {
response = client.newCall(request).execute();
JSONObject jj = new JSONObject((Map) response.body());
String e = jj.getString("status");
} catch(Exception e) {
e.printStackTrace();
}
答案 3 :(得分:0)
未处理的异常:org.json.JSONException
清楚地说明您没有处理此检查的异常,这就是您捕获异常的方法。
try {
....
} catch (JSONException ex) {
ex.printStackTrace();
}