Android - 同步SQLite和MySQL的最佳方法

9
我正在处理一个包含网页应用和移动应用的项目,该项目记录用户的日常数据。用户可以删除、更新他们的数据,并且他们可以使用多个设备插入数据。
我打算按照以下方式开发:
用户输入他们的数据,然后将其插入到SQLite中。一个服务将会定期启动(每5小时或其他)并使用时间戳与MySQL进行同步。
我在互联网上搜索了使用服务和时间戳的示例,但是没有找到。如果有一个示例或教程,那就太好了。
我对Android还很陌生,不知道开发这样的应用程序的最佳方法是什么。先谢谢了。

----编辑----
我考虑使用时间戳或同步。哪种方法更有效?

2个回答

7

您可以使用Google的Volley库或任何替代,这取决于您希望如何发送数据,最好的方法是您使用JSON让您的生活更轻松,从SQLite中获取要与后端同步的数据并使用Volley发送JsonObjectRequest,例如,您的请求可能如下所示

jsonObjectRequest postForm = new JsonObjectRequest(Request.Method.POST, URL, YourJsonData, 
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            // here you can get your response.
        }
    }, 
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // here you can tell there is something went wrong.
        }
    });

您可以在本地数据库中添加一个新的值来表示该值是否已同步。例如,假设您有一个名为“student”的表,该表有三个列:ID、NAME和synced。在上面的代码中,当响应返回成功时,请使用true|false更新该行的synced列,以指示该行是否已与后端同步。要从数据库获取数据,您应该执行以下操作。
public String getStudents() {
    List<Student> students = new ArrayList<Student>();
    String query = "SELECT * FROM student WHERE synced = 0";
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(query, null);
    if (cursor.moveToFirst()) {
        do {
            Student st = new Student();
            st.setId(cursor.getString(cursor.getColumnIndex(ID)));
            st.setName(cursor.getString(cursor.getColumnIndex(NAME)));
            st.setSynced(cursor.getInt(cursor.getColumnIndex(SYNCED)));
            students.add(st);
        } while (cursor.moveToNext());
    }
    db.close();
    return new Gson().toJson(students);
}

2
你应该将st.setName(cursor.getString(1)); 替换为 cursor.getString(cursor.getColumnIndex(NAME)),其中 NAME 是 Sqlite 列的名称。 - Juliatzin
@JuliatzindelToro 没错,谢谢提醒。 - Kosh
嘿@k0sh,感谢您的回答,我的问题是,如果我有5个表,那么需要创建JSON并使用Volley作为JsonObjectRequest发送到服务器,然后相应地从服务器获取数据,这会导致低性能吗?请给予回复。 - sunil

5
我认为最简单的方法是使用像http://loopj.com/android-async-http/或像k0sh所说的volley这样的库将数据发送到管理您mysql数据的PHP脚本。 您需要在服务器上编写一个php(或java)脚本来接收您的数据(您应该编写REST API)。
为了选择HTTP库,您应该在此处查看: 安卓中最稳健的HTTP库是什么? 您应该真正关心如何同步您的数据,因为它可能会耗尽您的电池。 在这里,您将学习如何优化更新: https://developer.android.com/training/efficient-downloads/index.html 希望这能帮助到您!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接