Android - 将SQLite与MySQL同步的最佳方式

时间:2014-11-03 01:24:02

标签: android mysql sqlite sync

我正在开发一个包含网络应用和移动应用的项目,该应用会记录每日用户的数据。用户可以删除,更新他们的数据,他们可以使用许多设备来插入数据。 我打算用这种方式发展:
用户输入他们的数据,然后插入SQLite。服务将定期启动(每5小时或每小时)以使用时间戳与MySQL同步。
我在网上搜索了一个使用服务和时间戳的样本,但我什么都没发现。如果有样本或教程会很棒。 我是Android的新手,我不知道开发这样的应用程序的最佳方式是什么。提前谢谢。

---- ---- EDIT
我考虑使用时间戳或同步。哪个更有效?

2 个答案:

答案 0 :(得分:7)

您可以通过谷歌或任何其他volley使用libraries库,这取决于您希望如何发送数据,最好的方法是使用JSON来改善生活更容易,从您希望与后端同步的sqlite中获取数据,并使用排球通过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并在上面的代码中同步更新行同步列为true | false,表示此行是否与您的后端同步或没有。要从数据库中获取数据,您应该这样做。

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

答案 1 :(得分:5)

AFAIK的方式是使用类似http://loopj.com/android-async-http/的lib或者volley lije k0sh表示将数据发送到将管理mysql数据的PHP脚本。 您必须在服务器中编写一个php(或java)脚本来接收数据(您应该编写REST API)

要选择您的HTTP库,您应该看一下:

What is the most robust HTTP library for android?

您应该非常关心如何同步数据,因为它可能会耗尽您的电量。 在这里,您将学习如何优化更新:

https://developer.android.com/training/efficient-downloads/index.html

希望它有所帮助!