You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发App遇“org.json.JSONException未被抛出”错误,求原因

解决exception 'org.json.JSONException' in never thrown in the corresponding错误

嘿,这个问题我太熟了!编译器报这个错的核心原因特别直白:你写的catch(JSONException e)块完全是“无用功”——因为对应的try代码块里根本不会抛出JSONException,所以编译器就会提示你这个异常永远不会被触发。

咱们拆解下你的代码场景:
你的try块里只有一行代码:callback.onSuccess(response);。如果你的DataCallback接口中,onSuccess方法没有声明throws JSONException,那这行代码在执行时就不可能抛出这个异常。既然不会抛,你写个catch去捕获它,编译器当然会觉得你在写冗余代码啦。

那该怎么解决?分两种情况来处理:

情况1:onSuccess确实不需要抛出JSONException

直接删掉这个catch(JSONException e)块就行。如果需要捕获其他可能的异常(比如自定义的回调失败异常),换成对应的捕获逻辑就好。示例:

try {
    callback.onSuccess(response);
} catch (CustomCallbackException e) {
    Log.e(TAG, "回调处理失败", e);
    callback.onFailure(e);
}

情况2:onSuccess需要处理JSON相关操作并抛出异常

那你得先修改DataCallback接口,让onSuccess方法声明抛出JSONException。这样try块里的代码就有可能触发这个异常,catch块就合法了。示例:

// 修改DataCallback接口
public interface DataCallback {
    void onSuccess(JSONObject response) throws JSONException;
}

// 原来的fetchData方法里的try-catch就可以保留了
try {
    callback.onSuccess(response);
} catch (JSONException e) {
    Log.e(TAG, "解析JSON失败", e);
    callback.onFailure(e);
}

简单来说,这个错误就是编译器在提醒你:“你捕获的异常在当前场景下根本不会发生,要么删掉catch,要么让try块真的能抛出这个异常”。

内容的提问来源于stack exchange,提问作者Cris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:28:05