我正在设计一个具有客户端和服务器端的 android 应用程序。主数据库位于每个 android 设备数据库都试图看起来像的服务器中。每当 Android 设备在线时,应用程序都会与服务器数据库(主数据库)同步。因为我可以通过在服务器中的数据库中添加、删除或更新来更改数据(用户不能在 Android 设备中更改数据库,即 Sqlite db)。同步后,Sqlite db 将被添加、删除或更新。
服务器数据库中有很多图像,我将所有数据作为 json 类型从 PHP 发送。
$datas = array('cats' => $cats, 'news' => $news, 'products' => $products);
$datas_json = (object) array('datas' => $datas);
$json = json_encode($datas_json);
echo $json;
该应用程序使用 BufferReader 进行读取。
HttpResponse response = httpclient.execute(httppost);
rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
之后,我试图让所有数据都来自服务器作为字符串。速度确实存在问题。
public String parseFromBuffer(BufferedReader rd) throws IOException
{
String line = "";
String full = "";
while ((line = rd.readLine()) != null)
{
full += line;
}
return full;
}
因为,如果您认为只有一张图像可能有 100.000 个字符(在 PHP 端,我使用 base64 图像来发送 java 并再次使用 java 解码。),想象一下 1000 张图像!因此,有时使用这种方式获得 4-5 张图像需要 1-2 分钟。得到 ' full
' 字符串后(它可能有 1.000.000 个字符!),我使用 jsonParser 来获取数据。
public jsonParser(String json_string) throws JSONException
{
json = new JSONObject(json_string);
}
...
public void parseJson() throws JSONException
{
JSONObject datas = json.getJSONObject("datas");
JSONArray cats = datas.getJSONArray("cats");
for(int i = 0; i < cats.length(); i++)
{
JSONObject c = cats.getJSONObject(i);
cat_id.add(c.getInt("cat_id"));
cat_name_tr.add(c.getString("cat_name_tr"));
cat_name_eng.add(c.getString("cat_name_eng"));
cat_upper_id.add(c.getInt("cat_upper_id"));
cat_order.add(c.getInt("cat_order"));
}
...
最后,我插入、更新或删除来自jsonParser()
sqlite db 的数据。
简而言之,我有一个问题,或者我需要关于跨服务器客户端获取图像的速度以及parseFromBuffer()
方法的解决方案。你可以提出任何建议,你可以批评我这样做的方式,也许我应该序列化一些东西,也许我应该以某种方式将服务器中的所有图像下载到“res”文件夹......
提前致谢。