Android-大数据json下载
Posted
技术标签:
【中文标题】Android-大数据json下载【英文标题】:Android - large data json download 【发布时间】:2018-06-26 09:54:32 【问题描述】:我在我的 android 应用中遇到了一个问题,即无法从 Web 服务中恢复大型 json 数据。 JSON 数据很大,因为包含从我的数据库中的表中恢复的图像。
前几天一切正常,但是这个表中的寄存器数量增长很快,然后问题就出现了。
这个问题不会在 ios 或 Android 模拟器上发生,而是在真正的 Android 设备上发生。
代码突然停止下载并抛出错误
org.json.JSONException: Unterminated string at character <cccc> of <json data>
也就是说,代码并没有下载整个 JSON 数据。此外,下载停止在不同的点总是我运行代码。
有人知道为什么会这样吗?
这是尝试从网络服务恢复数据的功能:
protected static JSONObject executeJSONQuery(ContentValues values,
WebServiceResolverCode code, Context context)
throws ContratoInativoException, JSONException
URL url;
HttpURLConnection conn;
JSONObject jArray = null;
// build the string to store the response text from the server
String response = "";
try
url = new URL(WebServiceResolver.getWebServiceSufix(code, context));
String param = "";
for (String key : values.keySet())
Object value = values.get(key);
param += key+"="+ URLEncoder.encode(value!=null?values.getAsString(key):"", "UTF-8")+"&";
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setFixedLengthStreamingMode(param.getBytes().length);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// send the POST out
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
out.write(param);
out.flush();
out.close();
// start listening to the stream
Scanner inStream = new Scanner(conn.getInputStream());
while (inStream.hasNextLine())
response += (inStream.nextLine());
inStream.close();
// process the stream and store it in StringBuilder
jArray = new JSONObject(response);
catch (IOException ex)
ex.printStackTrace();
Log.d("ERROR JSON STRING", response);
return jArray;
【问题讨论】:
那个json有多大? OOM 可能吗? +egold 或多或少 20MB 您的 Json 太大,即使您设法下载它,解码时也可能会出现 Out Of Memory 异常。您可能应该为这些图像添加一个 url,而不是它们的实际数据。不要忘记您的应用可以使用的 RAM 数量有限 我必须同意,你绝对应该延迟加载这些图片 【参考方案1】:首先,不要将图像保存在表格中。将其保存在您的服务器空间中,并将该图像的 URL 保存在您的表格中。当您需要加载图片时,请使用表格中保存的 URL 进行加载。
其次,JSON 是一种轻量级的数据交换格式。你应该限制它携带的物品数量。建议不要让它在您的表中携带多达一百行(转换为 JSON 时)。如果必须,请先加载一点,然后再加载一点,直到它结束。这就是无限滚动背后的想法。
这样,它可以有效地加载您的数据。
【讨论】:
非常感谢!我相信将图像保存在我的服务器中并仅将 URL 保存在桌面上是最好的方法:)。【参考方案2】:看起来您的 json 字符串对象没有正确形成。它可能在字符串末尾缺少双引号。检查参数字符串对象。
【讨论】:
以上是关于Android-大数据json下载的主要内容,如果未能解决你的问题,请参考以下文章
数据库大作业—— Android studio连接SQLserver数据库登录界面
数据库大作业—— Android studio连接SQLserver数据库登录界面
数据库大作业—— Android studio连接SQLserver数据库登录界面