5

私は、学生のリストをロードしてリストベースのアクティビティに表示するAndroidアプリに取り組んでいます。アプリには 2 つのコンポーネントがあります。xml を介して応答するサーバーがあり、現在アクティブな学生のリストと、アプリ側のデータベースにいくつかの詳細 (名前、年齢など) を含む論文の学生が保存されています。これら 2 つのデータ ソースを同期する方法が必要です。アプリが起動したら、xml をチェックして、サーバー上の学生が追加/削除されたかどうかを確認し、それに応じてデータベースを更新したいと思います。

ログイン時にxmlリストを学生オブジェクトに解析します。オブジェクト全体をアンドロイドがサポートするデータベースに保存/取得する方法はありますか?直接比較して、何を更新/削除するかを確認できますか? それは最終的に次のようなものになります

if (serverStudent[0].name == dbStudent[0].name)
   //overwrite dbStudent object with serverStudent fields

オブジェクトの永続性を実現し、Android で比較するための最も効率的で軽量な方法は何ですか?

4

4 に答える 4

3

私が過去に使用した方法は次のとおりです。

データベース内のオブジェクトが変更されるたびに、タイムスタンプ列を使用してその時刻を保存します。アプリが起動時に接続したら、アプリ データベースの各タイムスタンプを各オブジェクトのサーバー データベースのタイムスタンプと照合するだけです。タイムスタンプが一致する場合は、何もしません。タイムスタンプが一致しない場合は、更新されたレコードをサーバーから取得します。十分に詳細なタイムスタンプを使用していることを確認してください (通常はミリ秒またはマイクロ秒まで)。

タイムスタンプの良いところは、サーバー データでアプリ データを上書きしたくない場合は、どちらが新しいかを調べて、両方が編集されている場合はそのオブジェクトを保持できることです。いくつかの追加の考えを追加するだけです!

于 2013-05-20T04:35:18.727 に答える
1

あなたはこのようなことをすることができます -

public class StudentRecord {
    Vector<StudentData> studentDatas;
    public StudentRecord()
    {
        studentDatas = new Vector<StudentData>();
    }
    public Vector<StudentData> getRecords() {
        return studentDatas;
    }
    public void setRecords(Vector<StudentData> records) {
        this.studentDatas = records;
    }

    public class StudentData
    {
        String name,Rollno;

        public String getRollno() {
            return Rollno;
        }

        public void setRollno(String rollno) {
            Rollno = rollno;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

    }

}

ベクターオブジェクトを取得すると、次のstudentDatasようなことができます-

for(Object object : record.getRecords())
        {
            data = (StudentData)object;
            data.getRollno();
            data.getName();
        }
于 2013-05-26T17:08:53.567 に答える
0

あなたの質問を正しく理解できたかどうかはわかりませんが、私が理解している限り、私はこのようなことをします。

  • サーバー側では、json 学生オブジェクトを保持する Json 配列を送信します。
  • Android 側で同様の Student クラスを作成し、必要に応じて equals メソッドをオーバーライドします。
  • 次に、生徒ごとに equals メソッドで等しいかどうかを確認し、それに応じてアクションを実行します。
  • 学生のオブジェクト配列でより高速に検索したい場合は、配列の代わりにハッシュ マップを適用します。
于 2013-05-20T04:28:06.337 に答える
0

これらのライブラリをチェックしてください:
http://www.datadroidlib.com/
https://github.com/octo-online/robospice
どちらもあなたの状況に解決策を提供すると思います。

または、独自のソリューションを展開することもできます...基本的に、同期を行うサービスまたは asynctask を作成する必要があります。学生オブジェクトで、ID を渡すことができるコンストラクターを作成し、適切なレコードを取得することができます。 local db は、新しい情報が利用可能になった場合に更新される比較メソッドを作成します。

于 2013-05-20T03:50:50.807 に答える