0

只是好奇将数据从数据库同步到安卓平板电脑的最佳实践。

表:

- 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()));
        }
    }
4

1 回答 1

0

鉴于提供的信息有限,我会尝试以下方法:

(1) 让您的服务器记录您要更新的表上次“放置”在服务器上的时间。我不知道您使用的是什么后端语言,所以我无法提出建议。但是保持 lastupdated 时间戳应该很容易。

使用此时间戳,您将能够判断服务器上的表版本是否比移动设备上的版本更新。

(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
}

根据表文件的大小,您可能希望在服务器代码上添加一个函数,该函数仅返回表上次更新的时间。这样,您可以对照上次下载表格的时间检查上次更新的时间。如果表格在您下载后在服务器上更新,您可以继续下载新信息。

这是基本的想法。您可以根据自己的设置对其进行调整。

于 2013-04-01T17:59:25.567 回答