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

4
我有一个Android应用程序,其中包含两个数据库。我需要将它们与Web服务器上的两个相同(具有相同字段结构和字段名称)的数据库进行同步。但是首先,我需要查看Web服务器上的另一个数据库,从中提取一些信息,然后使用来自第一个数据库的一些附加数据将这两个数据库进行同步。我已经在Android应用程序上工作了一段时间,现在我刚学会了足够的PHP和MySQL来构建基本的CRUD Web应用程序。
我有几个问题:
- 如何在Android中同步这些数据库? - 同步是否可以双向进行?如果我在Android中更改数据库数据,我能否相应地在Web服务器上进行更改,反之亦然?
我正在为老年人设计基本的GUI,以便他们可以使用Android手机。我的Web应用程序应该将联系人和提醒添加到Android应用程序中的数据库中,但是当我手动在Android应用程序中添加联系人或提醒时,我也希望在我的Web应用程序中看到它们(双向同步)。
谢谢! :)

下面列出了很好的指针。请注意,您不一定需要在Android设备上拥有数据库。为什么要在设备上保留一个数据库和一个服务器上的数据库呢?相反,只需将数据库放在服务器上,并使用其他人显示的方法与其通信即可。Android设备通常连接到互联网,因此您可以省去同步数据库的麻烦。 - Ameen
4个回答

2
我认为你基本上想做的是创建一个API来桥接设备上的数据和服务器上的数据。
这个网站在我从头开始创建基本API时帮了我很多忙:site。你需要理解GET和POST的基础知识,但一旦掌握了这些知识,简单的数据传输API制作过程就非常直观了。
如果你真的想简化创建带有API的数据库的过程,我建议你查看一个名为StackMob的服务。该服务允许您设置一些相当简单(和复杂)的表格,并生成API以帮助您将这些表格连接到HTML5、iOS和Android。

2
我将分享如何使用PHP文件在Android应用程序和PHP服务器之间同步数据,比Web服务等更容易,并且可以获得相同的结果和返回值。
查询:
* -> PHP端:*
  • Create your Table Structure for example : MyTableName : columns Login / Password
  • Create a PHP file to query data from your table name

    <?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();
    ?>
    
  • Name your PHP file as your table Name for example : MyTableName.php

  • Put this file in your root server directory : for example in Wamp server the www directory

  • Test the return data using a browser, using your URL like www.localhost/MyTableName.php, normally you will have all your query content in Json format.

* -> Android端:*

  • Download this class 'ClientHTTP' https://www.dropbox.com/s/odpaus1tjhd9orv/ClientHTTP.java

  • Add Internet Permission in your manifest.

  • Inside the click of your button Synchronize put :

    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 通常情况下,您将获得“True”,并且在您的服务器表名称中将添加一个新行,其中包含test / test。
*-> Android端:*
  • Inside the click of your 'Add' button write :

        // 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();
    
  • If your have your own server replace localhost per your domain name.

  • If you are using emulator , replace your localhost domaine name per
    your actual IP address for example the query URL becomes : 192.168.1.2/MyTableName.php


0
您需要开发 Web 服务以实现同步。我已经使用 SOAP 协议在 Android 应用程序和 ASP.NET 应用程序之间建立通信。基本上,我们开发了游戏应用,在 ASP.NET 和 SQL Server 2008 中拥有管理员面板和服务器数据库,而 Android 应用程序具有 SQLite 数据库。这两个数据库都通过 Web 服务进行同步。您也可以使用 RESTful Web 服务代替 SOAP。

0
你需要一个 WebService 来与数据库服务器和 Android 设备进行通信。
开发一个 Web 服务:它应该具有从数据库服务器获取数据并将其返回到数据库服务器的逻辑。
在 Android 端,您可以使用 KSoap 来消费 Web 服务。在这里查看示例。

那么我在Android端开发了一个WebService,它可以将数据发送到服务器并从服务器获取数据?服务器端需要做些什么吗? - Tomáš 'Guns Blazing' Frček

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接