我正在设计一个具有客户端和服务器端的Android应用程序。主数据库在服务器中,每个android设备db都试图看起来像。只要Android设备在线,该应用程序就会与服务器数据库(主数据库)同步。因为我可以通过在服务器中的数据库中添加,删除或更新来更改数据(用户无法在Android设备中更改数据库,a.k.a Sqlite db)。同步后,将添加,删除或更新Sqlite数据库。
服务器数据库中有很多图像,我将所有数据作为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个图像!因此,有时用这种方式需要1-2分钟才能获得4-5张图像。获得'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'文件夹...
提前致谢。