将Android数据库与服务器数据库同步

时间:2012-04-13 15:54:36

标签: php android mysql database synchronization

我有一个包含两个数据库的Android应用。我需要在Web服务器上将它们与两个相同(相同字段结构和字段名称)的数据库同步。但首先我需要在Web服务器上查看另一个数据库,从中提取一些信息,然后将这两个数据库与第一个数据库中的一些其他数据同步。我已经在Android应用程序上工作了一段时间,我刚刚学习了足够的PHP与MySQL来构建一个基本CRUD的Web应用程序。

我有几个问题:

  • 如何在Android中同步这些数据库?

  • 同步可以双向工作吗?如果我在Android中更改数据库数据,我可以在Web服务器上相应地更改它们,反之亦然吗?

我正在为老年人开发一个基本的GUI,以便他们可以使用Android手机。我的Web应用程序应该在Android应用程序的数据库中添加联系人和提醒,但是当我在我的Android应用程序中手动添加联系人或提醒时,我想在我的Web应用程序中看到这些(同步)。

谢谢! :)

4 个答案:

答案 0 :(得分:2)

我认为您基本上想要做的是创建一个API来桥接设备上的数据和服务器上的数据。

从头开始创建基本API时,这个site对我帮助很大。您必须了解GET和POST如何工作的基础知识,但是一旦完成,为简单数据传输制作API的过程就非常简单。

如果您真的想简化使用API​​创建数据库的过程,我建议您查看名为StackMob的服务。该服务允许您设置一些非常简单(和复杂)的表,并生成API以帮助您将这些表连接到HTML5,iOS和Android。

答案 1 :(得分:2)

我将分享如何使用PHP文件在Android应用程序和PHP服务器之间同步数据,它比Web服务等更容易..并且它给出了相同的结果返回相同的结果。

<强>查询

* - &gt; PHP方面:*

  • 创建表结构,例如:MyTableName:columns Login / Password
  • 创建一个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目录

  • 使用您的网址,使用浏览器测试返回数据 www.localhost/MyTableName.php,通常您会收到所有查询 JSON格式的内容。

* - &gt; Android方面:*

  • 下载此课程'ClientHTTP'https://www.dropbox.com/s/odpaus1tjhd9orv/ClientHTTP.java

  • 在清单中添加互联网权限。

  • 点击按钮同步放入:

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

<强>更新

* - &gt; 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
  • 使用此网址www.localhost/insert.php?PARAM_LOGIN=test&PARAM_PWD=test
  • 使用浏览器测试您的插入内容
  • 通常,您将获得“True”,并在您的服务器表名称中添加新名称 将添加带测试/测试的行。

* - &gt; 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();
    
  • 如果您拥有自己的服务器,请根据您的域名替换localhost。

  • 如果您使用的是模拟器,请替换每个的localhost域名 您的实际IP地址,例如查询网址变为:   192.168.1.2/MyTableName.php

答案 2 :(得分:0)

您需要一个WebService,以便与DataBase Server&amp; Android设备。

开发Web服务:它应具有从数据库服务器和数据库获取数据的逻辑。返回数据库服务器。

在Android端,您可以使用KSoap来使用Web服务。 See this example here.

答案 3 :(得分:0)

您需要开发Web服务才能实现同步。我使用SOAP协议在android应用程序和asp.net应用程序之间建立通信。基本上我们开发了游戏应用程序,它在asp.net和sql server 2008中都有管理面板和服务器数据库,android应用程序有SQLite数据库。这两个数据库都通过Web服务同步。您还可以使用restful Web服务而不是SOAP