Java 从JSON响应中获取值

Java 从JSON响应中获取值,java,android,json,okhttp,Java,Android,Json,Okhttp,我需要完成的事情很简单——我使用OKHttp从我的服务器获取一个JSON编码的响应,我需要解析一个简单的(一维)JSON响应以提取单个值 我已经写了一个简单的代码片段,但是我得到了一个错误 以下是OKHttpClient的代码,以备不时之需: OkHttpClient client = new OkHttpClient(); RequestBody formVars = new FormBody.Builder().add(..vars..).build(); Request request =

我需要完成的事情很简单——我使用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(“状态”)下

未处理的异常:org.json.JSONException

JSON字符串只是
{“status”:“1”}

您忘记将该响应转换为字符串。您只需执行以下操作:

String stringResponse = response.body().string();

JSONObject jj = new JSONObject(stringResponse);
抛出JSONException

将上面的行添加到您的方法中。并将您的响应转换为字符串

JSONObject objJsonObject = new JSONObject(response.body().toString());
System.out.println(objJsonObject.getString("status"));
你的挡块也错了。如果此处的throws不正确,那么这将是正确的声明。试抓拦网。如果需要,最后添加

try {

} catch (JSONException e) {
    // TODO: handle exception
}

更改catch子句以捕获异常,如下所示:

try {
      response = client.newCall(request).execute();
      JSONObject jj = new JSONObject((Map) response.body());
      String e = jj.getString("status");
} catch(Exception e) {
      e.printStackTrace();
}
未处理的异常:org.json.JSONException

明确说明您没有处理这个已检查的异常,这就是您捕获异常的方式

try {
....
} catch (JSONException ex) {
  ex.printStackTrace();
}

您的catch子句中没有任何例外。。。Android Studio可以自动为您完成这一任务我想您误解了这个问题。虽然你是对的,请看我上面的评论是的,我想我误解了。我只看到了字符串转换。由于未定义catch子句,未处理的异常到达。