Android Studio中使用Java解析JSON仅返回完整响应问题求助
问题根因
- 你调用的目标接口返回的是单个JSON对象结构,你错误使用
JSONArray类解析响应内容,直接触发JSONException异常,解析逻辑被中断,myFormattedAnimeQuote始终保持初始空值,所以最终UI展示时走了显示原始响应的分支。 - 原有代码里的数组遍历逻辑也不适用于该接口,该单条查询接口每次只会返回1条语录数据,不需要遍历操作。
修复方案
只需要修改try代码块内的解析逻辑即可,修正后的代码如下:
public void animeCall() { OkHttpClient client = new OkHttpClient(); String URL = "https://animechan.vercel.app/api/random"; Request request = new Request.Builder() .url(URL) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { final String myResponse = response.body().string(); String myFormattedAnimeQuote = ""; try { // 直接解析为JSONObject,不再使用JSONArray JSONObject obj = new JSONObject(myResponse); String character = obj.getString("character"); String anime = obj.getString("anime"); String quote = obj.getString("quote"); myFormattedAnimeQuote = anime + ": " + quote + ": " + character; } catch (JSONException e) { e.printStackTrace(); } final String myFinalQuote = myFormattedAnimeQuote; MainActivity.this.runOnUiThread(() -> { if (!myFinalQuote.equals("")) { textView.setText(myFinalQuote); } else { textView.setText(myResponse); } }); } } }); }
如果后续遇到类似解析失败的问题,可以先打印响应原始内容确认JSON结构,再选择对应的解析类处理即可。
内容的提问来源于stack exchange,提问作者Tyler Thomas
相关产品推荐
相关产品推荐

