JSON响应{25}中的未终止对象

时间:2017-09-29 06:55:51

标签: android json httpresponse

我正在进行API调用以获取用户上传的图像的base64字符串,然后我将其用于显示。问题是,我得到了这个例外:

Unterminated object at character 25691

我知道这是一个很大的响应,但有时我的代码读取响应并且它有效,有时它会切断JSON响应的最后一个大括号,这意味着我得到:

{
 "objectID": 0,
 "isSuccess": true,
 "_ErrorText": null,
 "errorText": "",
 "objectTag": "Certificates",
 "newRegister": null,
 "objectItem": {
    "userDocumentID": 0,
    "Name": "Certificate",
    "status": "pending",
    "docTypeID": 0,
    "CdnName": "somepath.jpg",
    "ImageArray": "INSERT MASSIVE STRING HERE"
 }

我应该得到那个确切的响应,只有最后一个大括号,才能使它成为有效的JSON。我曾想过捕获该异常并自己附加它,但我不想将逻辑放在catch块中。 以下是我从API中读取响应的代码:

try {   
   BufferedReader reader = new BufferedReader(new InputStreamReader(r.getEntity().getContent(), "UTF-8"));         
   StringBuilder builder = new StringBuilder();

   String line = null;
   while ((line = reader.readLine()) != null) {
     builder.append(line);
   }

   //int read;
   //char[] buff = new char[1024];
   //while ((read = reader.read(buff)) != -1) {
   //    builder.append(buff, 0, read);
   //}

   JSONTokener tokener = new JSONTokener(builder.toString());
   finalResult = new JSONObject(tokener);

   response.put("isSuccess", finalResult.optBoolean("isSuccess"));
   response.put("errorText", finalResult.optString("errorText"));
   response.put("objectTag", finalResult.optString("objectTag"));
   response.put("objectItem", finalResult.optJSONObject("objectItem"));

 } catch (Exception ex) {
     this.HandleError(ex);
 }

如果可能的话,请解释为什么这样的电话会随机失败?也许我可以做的就是避免这个例外。

任何帮助都将不胜感激。

0 个答案:

没有答案