2012-04-13 171 views
3

我有一個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

  • 回答

    2

    我想你基本上想要做的是創建一個API來橋接設備上的數據和服務器上的數據。

    site幫助我從頭開始創建一個基本的API。您必須瞭解GET和POST如何工作的基礎知識,但一旦您瞭解到爲簡單數據傳輸製作API的過程非常簡單。

    如果你真的想簡化使用API​​創建數據庫的過程,我會建議檢出名爲StackMob的服務。該服務允許您設置一些非常簡單(和複雜)的表格,並生成API以幫助您將這些表格連接到HTML5,iOS和Android。

    0

    您需要一個WebService,以便您可以與Android設備的DataBase服務器&進行通信。

    開發Web服務:它應該具有從數據庫服務器獲取數據的邏輯返回到數據庫服務器。

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

    +0

    因此,我在Android端開發了一個WebService,它可以將數據發送到服務器並從服務器獲取它們呢?我需要在服務器端做什麼嗎? – 2012-04-13 16:55:03

    0

    您需要開發Web服務來實現同步。我已經使用SOAP協議來建立android應用程序和asp.net應用程序之間的通信。基本上我們開發了在asp.net和sql server 2008中有管理面板和服務器數據庫的遊戲應用程序,android應用程序有SQLite數據庫。這兩個數據庫通過Web服務進行同步。您還可以使用寧靜的Web服務而不是SOAP

    2

    我將分享如何在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

    相關問題