0

データベースから Android タブレットへのデータの同期に関するベスト プラクティスに興味があります。

テーブル:

- Part1
- Part2
- Part3
- Part4
- Part5

タブレットでアプリを開くたびに、データベースから最新のリストを取得し、テーブルを切り捨てて、レコードを再度追加します。各テーブルは 400 レコードで構成されます。したがって、サーバーからデータを取得して追加するには、テーブルごとに約 60.45 かかります。私は5つのテーブルを持っているので、約5分かかります。私がやっていることを効率的に同期するためのより良い方法はありますか? サーバーからデータを取得した後、テーブルを切り捨てる代わりに、テーブルを追加する前に最初に存在するかどうかを確認しようとしましたが、時間はかかりませんでした。

私が現在行っていること: API サーバーから JSON リストを取得し、テーブルを切り捨てて行を追加し直します。それぞれ 500 レコードの 5 つのテーブルでかなり時間がかかります。

    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 に答える