【问题标题】:How to catch possible errors in Json format? [closed]如何捕捉 Json 格式的可能错误? [关闭]
【发布时间】:2026-02-05 19:10:02
【问题描述】:

我正在尝试使用 Microsoft 的计算机视觉 API 制作应用。我想通过获取返回的 Json 来捕获错误。这是API的链接...https://southcentralus.dev.cognitive.microsoft.com/docs/services/56f91f2d778daf23d8ec6739/operations/56f91f2e778daf14a499e1fa

这是我的代码...提前致谢!

@Override
protected void onPostExecute(String data) {
    super.onPostExecute(data);

    mEditText.setText("");
    if (e != null) {
        mEditText.setText("Error: " + e.getMessage());
        this.e = null;
    } else {
        Gson gson = new Gson();

        AnalysisInDomainResult result2 = gson.fromJson(data, AnalysisInDomainResult.class);

        mEditText.append("Image format: " + result2.metadata.format + "\n");
        mEditText.append("Image width: " + result2.metadata.width + ", height:" + result2.metadata.height + "\n");
        mEditText.append("\n");

        //decode the returned result
        JsonArray detectedCelebs = result2.result.get("celebrities").getAsJsonArray();
        if(result2.result != null){
           mEditText.append("Celebrities detected: "+ detectedCelebs.size()+"\n");

            for(JsonElement celebElement: detectedCelebs) {
                JsonObject celeb = celebElement.getAsJsonObject();
                mEditText.append("Name: "+celeb.get("name").getAsString() +", score" +
                        celeb.get("confidence").getAsString() +"\n");
            }
        }
        mEditText.setSelection(0);
    }

【问题讨论】:

  • 添加try..catch..?

标签: java android json computer-vision microsoft-cognitive


【解决方案1】:

正如您在code 中看到的,如果服务返回错误,则会抛出一个简单(简洁)的Exception

如果您从Sample App 对代码进行建模,您将看到代码如下所示:

private class doRequest extends AsyncTask<String, String, String> {
    // Store error message
    private Exception e = null;

    public doRequest() {
    }

    @Override
    protected String doInBackground(String... args) {
        try {
            return process();
        } catch (Exception e) {
            this.e = e;    // Store error
        }

        return null;
    }

    @Override
    protected void onPostExecute(String data) {
        super.onPostExecute(data);
        ...
    }

e 字段可以让您找到 HTTP 状态代码,但错误详细信息已经丢失。为此,您应该在 that library 上提出问题。

【讨论】:

  • 好的,谢谢@cthrash