Android - 将 SQLite 与 MySQL 同步的最佳方式 [重复]

Posted

技术标签:

【中文标题】Android - 将 SQLite 与 MySQL 同步的最佳方式 [重复]【英文标题】:Android - Best way to sync SQLite with MySQL [duplicate] 【发布时间】:2014-12-29 15:39:48 【问题描述】:

我正在开发一个项目,其中包含记录日常用户数据的网络应用和移动应用。用户可以删除、更新他们的数据,他们可以使用许多设备插入数据。 我打算这样开发: 用户输入他们的数据,然后插入到 SQLite。服务将定期启动(每 5 小时或 sth)以使用时间戳mysql 同步。 我确实在互联网上使用服务和时间戳搜索了一个样本,但我什么也没找到。如果有示例或教程会很棒。 我是 android 新手,我不知道开发这样的应用程序的最佳方法是什么。提前致谢。

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

【问题讨论】:

【参考方案1】:

您可以使用 google 的 volley 库或任何替代的 libraries,这取决于您希望如何发送数据,最好的方法是使用 JSON 让您的生活更轻松,从您喜欢与后端同步并使用 volley 将其发送到 JsonObjectRequest 的 sqlite,例如您的请求可能如下所示

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 并在上面的代码中同步或者没有。要从数据库中获取数据,您应该执行以下操作。

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

【讨论】:

你应该替换 st.setName(cursor.getString(1));通过 cursor.getString(cursor.getColumnIndex(NAME)) 其中 NAME 是 Sqlite 列的名称。 @JuliatzindelToro 正确,感谢提醒。 嘿@k0sh 感谢您的回答,我的问题是,如果我有 5 个表,那么需要从中创建 json 并使用 volley 将其作为 JsonObjectRequest 发送到服务器,然后相应地从服务器获取数据,这会导致性能低下吗?请回复。【参考方案2】:

AFAIK 的主要方法是使用像 http://loopj.com/android-async-http/ 或 volley lije k0sh 这样的库将数据发送到 php 脚本,该脚本将管理您的 mysql 数据。 您必须在服务器中编写一个 php(或 java)脚本来接收您的数据(您应该编写一个 REST API)

要选择你的 HTTP 库,你应该看这里:

What is the most robust HTTP library for android?

您应该真正关心如何同步您的数据,因为它可能会耗尽您的电池电量。 在这里,您将了解如何优化更新:

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

希望对你有帮助!

【讨论】:

以上是关于Android - 将 SQLite 与 MySQL 同步的最佳方式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 Android 应用上的 SQLite DB 与远程 MySQL DB 同步

将用户输入编辑文本与SQLite数据库Android Java进行比较

如何将 Android 手机上的 SQLite 数据库与服务器上的 MySQL 数据库同步?

将本地db(Sqlite)与服务器db android同步

Android SQLite与ListView的简单使用

与来自 Android 的外部 SQLite 数据库交互。