同步Android数据库与服务器数据库
我有一个Android应用程序与两个数据库。我需要将它们与Web服务器上的两个相同(相同字段结构和字段名称)数据库同步。但首先,我需要查看Web服务器上的另一个数据库,从中提取一些信息,然后将这两个数据库与来自第一个数据库的其他数据同步。我已经在Android应用程序上工作了一段时间,并且我刚刚学习了足够的MySQL来构建带有基本CRUD的Web应用程序。同步Android数据库与服务器数据库
我有几个问题:
如何同步Android中的数据库?
同步是否可以同时工作?如果我在Android中更改数据库数据,是否可以在Web服务器上相应地更改它们,反之亦然?
我正在为老年人开发基本的GUI,以便他们可以使用Android手机。我的web应用程序应该将联系人和提醒添加到Android应用程序的数据库中,但是当我在我的Android应用程序中手动添加联系人或提醒时,我希望在我的Web应用程序中看到这些联系人或提醒(两种方式同步)。
谢谢! :)
您需要一个WebService,以便您可以与Android设备的DataBase服务器&进行通信。
开发Web服务:它应该具有从数据库服务器获取数据的逻辑返回到数据库服务器。
在Android端,您可以使用KSoap来使用Web服务。 See this example here.
因此,我在Android端开发了一个WebService,它可以将数据发送到服务器并从服务器获取它们呢?我需要在服务器端做什么吗? – 2012-04-13 16:55:03
您需要开发Web服务来实现同步。我已经使用SOAP协议来建立android应用程序和asp.net应用程序之间的通信。基本上我们开发了在asp.net和sql server 2008中有管理面板和服务器数据库的游戏应用程序,android应用程序有SQLite数据库。这两个数据库通过Web服务进行同步。您还可以使用宁静的Web服务而不是SOAP
我将分享如何在Android应用程序和PHP服务器之间同步数据使用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格式的所有查询 内容。
* - > Android的一面:*
下载这个类在你的清单 '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,它的名字到 Insert.php
- 测试使用的浏览器与此URL www.localhost/insert.php?PARAM_LOGIN=test&PARAM_PWD=test
- 通常你会得到“真”,并在您的服务器表名的插入将添加新的测试/测试 行。
* - > Android的一面:*
-
里面的 '添加' 按钮写的点击:
// 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();
如果你对你自己的服务器替换本地主机每有你的域名。 192.168.1.2/MyTableName.php
你已经得到了很大的指针:
如果你正在使用模拟器,每
例如查询网址变成实际的IP地址替换本地主机名酒庄下面列出。请注意,虽然你不一定需要在Android设备上有一个数据库。为什么要在设备上和服务器上保留一个?相反,只需在服务器上安装数据库并使用其他人显示的方法与其通信。 Android设备通常连接到互联网,因此您可以节省同步数据库的麻烦。 – Ameen 2012-12-26 06:30:54