对将数据从数据库同步到Android平板电脑的最佳做法感到好奇。
表:
- Part1
- Part2
- Part3
- Part4
- Part5
每当我在平板电脑上打开应用程序时,我会从数据库中获取最新列表,截断表格并重新添加记录。每个表包含400条记录。因此,每个表需要大约60.45才能从服务器获取数据并添加它。由于我有5个表,大约需要5分钟。有没有更好的方法来实现我正在做的有效同步?从服务器获取数据后,我没有截断表格,而是在添加之前尝试检查它是否存在第一,但这对时间没有帮助。
我目前正在做什么:我从API服务器获取JSON列表并截断表并添加行。相当耗费5个表,每个表有500个记录。
libraryApp = (LibraryApp) act.getApplication();
List<Pair> technicians = getJsonData("get_technicians");
if(technicians.size() > 0) {
stiLibraryApp.getDataManager().emptyTechnicianTable(); // truncate current table
// add technicians back to database
for(Pair p : technicians) {
libraryApp.getDataManager().saveTechnician(new Technician((Integer) p.key(), (String) p.value()));
}
}
答案 0 :(得分:0)
鉴于提供的信息有限,我会尝试以下方法:
(1)让您的服务器记录您正在更新的表最后“放入”服务器的时间。我不知道你使用的是哪种后端语言,所以我无法消化。但是保留最后更新的时间戳应该很容易。
通过此时间戳,您可以判断服务器上的表格版本是否比移动设备上的版本更新。
(2)使用AsyncTask
下载您需要的数据。我不确定所有5个表是否在同一个活动中,在单独的活动中,在片段中还是其他内容中。但是,一般的想法如下:
private class GetTableData extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(){
//get data from your sever
return null;
}
protect void onPostExecute(Void result){
//update the table view if version on server is newer
}
您将放置所有I / O方法,即连接到服务器并在doInBackground
内下载数据的方法。您将在onPostExecute
内放置更新表视图的所有方法。这个分离是必要的,因为I / O函数必须在Jellybean之后在后台运行,所以必须从UI线程更新视图。
(3)检查下载内容的时间戳。如果您下载的内容更新,请更新您的表格。您只需将条件语句添加到onPostExecute
函数中即可完成此操作
if(lastDownloadTime < lastUpdatedOnServerTime){
//update view
}
根据表文件的大小,您可能希望在服务器代码上添加一个函数,该函数仅返回表上次更新的时间。这样,您可以根据上次下载表格的时间来检查上次更新的时间。如果在下载后在服务器上更新了表,则可以继续下载新信息。
这是基本的想法。您可以根据自己的设置进行调整。