将 Android 数据库与服务器数据库同步
Posted
技术标签:
【中文标题】将 Android 数据库与服务器数据库同步【英文标题】:Sync Android database with a server database 【发布时间】:2012-04-26 00:24:34 【问题描述】:我有一个带有两个数据库的 android 应用。我需要将它们与 Web 服务器上的两个相同(相同的字段结构和字段名称)数据库同步。但首先我需要查看网络服务器上的另一个数据库,从中提取一些信息,然后将这两个数据库与第一个数据库中的一些附加数据同步。我已经在 Android 应用程序上工作了一段时间,我刚刚学会了足够的 php 和 mysql 来构建一个具有基本 CRUD 的 Web 应用程序。
我有几个问题:
如何在 Android 中同步这些数据库?
可以双向同步吗?如果我在 Android 中更改数据库数据,我可以在 Web 服务器上相应地更改它们吗?反之亦然?
我正在为老年人开发一个基本的 GUI,以便他们可以使用 Android 手机。我的 Web 应用程序应该将联系人和提醒添加到 Android 应用程序的数据库中,但是当我在我的 Android 应用程序中手动添加联系人或提醒时,我也希望在我的 Web 应用程序中看到它们(双向同步)。
谢谢! :)
【问题讨论】:
您在下面列出了很好的建议。请注意,您不一定需要在 android 设备上拥有数据库。为什么要在设备上保留一个,在服务器上保留一个?相反,只需将数据库放在服务器上并使用其他人显示的方法与之通信。 Android 设备通常连接到互联网,因此您可以省去同步数据库的麻烦。 【参考方案1】:我认为您基本上想要做的是创建一个 API 来桥接设备上的数据和服务器上的数据。
这个site 在从头开始创建基本 API 时帮助了我很多。您必须了解 GET 和 POST 如何工作的基础知识,但是一旦您了解了为简单数据传输创建 API 的过程就非常简单了。
如果您真的想通过 API 简化创建数据库的过程,我建议您查看名为 StackMob 的服务。该服务允许您设置一些非常简单(和复杂)的表格,并生成 API 来帮助您将这些表格连接到 html5、ios 和 Android。
【讨论】:
【参考方案2】:我将分享如何使用 PHP 文件在 Android 应用程序和 PHP 服务器之间同步数据,它比 web 服务等更容易。它给出相同的结果和相同的返回。
查询
* -> PHP 端:*
创建您的表结构,例如:MyTableName:列登录名/密码创建一个 PHP 文件以从您的表名中查询数据
<?php
//To Connect to your Data base
mysql_connect("localhost","root","");
mysql_select_db("YourDataBaseName");
// To execute a query from Your table
$sql=mysql_query("SELECT * FROM `Your_Table_Name");
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
// Convert to Json format
print(json_encode($output));
// mysql_close();
?>
将 PHP 文件命名为表格名称,例如:MyTableName.php
将此文件放在您的根服务器目录中:例如在 Wamp 服务器中的 www 目录中
使用浏览器测试返回数据,使用您的 URL,例如 www.localhost/MyTableName.php,通常你会得到所有的查询 Json 格式的内容。
* -> 安卓端:*
下载这个类'ClientHTTP'https://www.dropbox.com/s/odpaus1tjhd9orv/ClientHTTP.java
在清单中添加 Internet 权限。
点击你的按钮同步放:
String lReturn=_myClientHtpp.readFromUrl(www.localhost/MyTableName.php);
// It will return a json format (Like navigator)
//Code to Clear your data from Sqlite data base TABLE ....
try
// Create your Json Array
JSONArray lList=new JSONArray(lReturn);
// Iterate the json arry to get each Json object
for (int i = 0; i < lList.length(); i++)
JSONObject lObject=lList.getJSONObject(i);
String lLogin=lObject.getString("Login");
String lPWD=lObject.getString("PassWord");
//Code to Insert in Sqlite data base .....
catch (JSONException e)
e.printStackTrace();
更新
* -> PHP 端:*
<?php
//Connect to Database
mysql_connect("localhost","root","");
mysql_select_db("YourDataBase");
$sql= mysql_query("INSERT INTO YourTableName (Login,PassWord) VALUES ('".$_REQUEST['PARAM_Login']."','".$_REQUEST['PARAM_PWD']."')");
if($sql==1)
echo "true";
else
echo "false";
// mysql_close();
?>
把这个 PHP 文件放在你的主服务器目录 www,并将它命名为
插入.php
使用带有此 URL www.localhost/insert.php?PARAM_LOGIN=test&PARAM_PWD=test 的浏览器测试您的插入
通常您会得到“True”,并且在您的服务器表名中会出现一个新的
将添加带有 test / test 的行。
* -> 安卓端:*
在点击“添加”按钮的地方写:
// List of params
ArrayList<NameValuePair> lListOfParams=new ArrayList<NameValuePair>();
// Param login
BasicNameValuePair PARAM_Login=new BasicNameValuePair("PARAM_Login", "test from Android");
// Param PWD
BasicNameValuePair PARAM_PWd=new BasicNameValuePair("PARAM_PWD", "Test from Android");
// Add params to List
lListParams.add(PARAM_Login);
lListParams.add(PARAM_PWd);
// Execute the post method from your ClientHttp class
boolean lIsInsert=_myClientHtpp.SendToUrl("www.localhost/insert.php", lListOfParams);
if(lIsInsert)
Toast.makeText(this, "Insert Success", Toast.LENGTH_LONG).show();
else
Toast.makeText(this, "Insert Error", Toast.LENGTH_LONG).show();
如果您有自己的服务器,请根据您的域名替换 localhost。
如果您使用的是模拟器,请将您的 localhost 域名替换为每个 您的实际 IP 地址,例如查询 URL 变为: 192.168.1.2/MyTableName.php
【讨论】:
【参考方案3】:您需要一个 WebService,以便与数据库服务器和 Android 设备进行通信。
开发一个 Web 服务:它应该具有从数据库服务器获取数据并返回到数据库服务器的逻辑。
在 Android 端,您可以使用 KSoap 来使用 Web 服务。 See this example here.
【讨论】:
所以我在Android端开发了一个WebService,它可以向服务器发送数据并从服务器获取它们?我必须在服务器端做任何事情吗?【参考方案4】:您需要开发 Web 服务来实现同步。我使用 SOAP 协议在 android 应用程序和 asp.net 应用程序之间建立通信。基本上,我们已经开发了游戏应用程序,在 asp.net 和 sql server 2008 中具有管理面板和服务器数据库,而 android 应用程序具有 SQLite 数据库。这两个数据库都通过 Web 服务进行同步。你也可以使用 RESTful Web 服务来代替 SOAP
【讨论】:
以上是关于将 Android 数据库与服务器数据库同步的主要内容,如果未能解决你的问题,请参考以下文章
将 XAMPP 本地主机数据库与 Android 数据库 onClick 同步
如何将 Android 手机上的 SQLite 数据库与服务器上的 MySQL 数据库同步?
Android - 将 SQLite 与 MySQL 同步的最佳方式 [重复]
[android数据库同步]将Android与网站数据库同步?(Sync Android with a website database?)