如何捕获 Json 格式的可能错误?

How to catch possible errors in Json format?

我正在尝试使用 Microsoft 的计算机视觉制作应用 API。我想通过返回 Json 来捕获错误。这是 API 的 link...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);
    }

如您在 code 中所见,如果服务 returns 出错,将抛出一个简单(简洁)的 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.

上提出问题