我正在进行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);
}
如果可能的话,请解释为什么这样的电话会随机失败?也许我可以做的就是避免这个例外。
任何帮助都将不胜感激。