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进行比较