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

问题描述:

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

我有几个问题:

  • 如何同步Android中的数据库?

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

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

谢谢! :)

+0

你已经得到了很大的指针:

  • 如果你正在使用模拟器,每
    例如查询网址变成实际的IP地址替换本地主机名酒庄下面列出。请注意,虽然你不一定需要在Android设备上有一个数据库。为什么要在设备上和服务器上保留一个?相反,只需在服务器上安装数据库并使用其他人显示的方法与其通信。 Android设备通常连接到互联网,因此您可以节省同步数据库的麻烦。 – Ameen 2012-12-26 06:30:54

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

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

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

    您需要一个WebService,以便您可以与Android设备的DataBase服务器&进行通信。

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

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

    +0

    因此,我在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(); 
    ?> 
    

    * - > 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