2013-04-01 37 views
0

只是對將數據從數據庫同步到Android平板電腦的最佳做法感到好奇。構建平板電腦和數據庫之間同步的最佳方式?

表:

- Part1 
- Part2 
- Part3 
- Part4 
- Part5 

每當我打開我搶的最新名單從數據庫中平板電腦的應用程序,截斷表,並重新添加的記錄。每個表格由400條記錄組成。因此,從服務器獲取數據並添加它需要大約60.45。由於我有5張桌子,大約需要5分鐘。有什麼更好的方法來實現我所做的高效同步?在我從服務器獲取數據之後,我並沒有截斷表格,而是試圖在添加它之前檢查它是否存在,但對時間沒有幫助。

我現在在做什麼:我從API服務器獲取JSON列表並截斷表格並添加行。相當耗時,每個表有500個記錄。

libraryApp = (LibraryApp) act.getApplication(); 
    List<Pair> technicians = getJsonData("get_technicians"); 
    if(technicians.size() > 0) { 
     stiLibraryApp.getDataManager().emptyTechnicianTable(); // truncate current table 
     // add technicians back to database 
     for(Pair p : technicians) { 
      libraryApp.getDataManager().saveTechnician(new Technician((Integer) p.key(), (String) p.value())); 
     } 
    } 
+1

你可以根據一些代碼片段問一個更具體的問題嗎?很難回答「最佳方式」問題,但不知道自己在做什麼。 – Rarw

+0

我正嘗試將數據從遠程數據庫同步到平板電腦,以便人們可以在移動時使用它。我希望應用程序同步兩種方式:1)當您第一次打開應用程序時,它將首先獲取所有數據2)稱爲「同步」的按鈕,如果數據庫發生更改,則會更新/重新添加數據中的數據。那個更好嗎? – user2011736

+0

你現在怎麼樣?你有什麼嘗試?你能顯示代碼嗎? – Rarw

回答

0

鑑於提供我會嘗試以下的有限信息:

(1)讓你的服務器保持的,當你正在更新的表是最後一個「放」在服務器上的記錄。我不知道你使用的是什麼後端語言,所以我不能做出消化。但是保持最新更新的時間戳應該很容易。

使用此時間戳,您將能夠確定服務器上的表格版本是否比移動設備上的版本更新。

(2)使用AsyncTask下載所需的數據。我不確定是否所有5個表都在同一個活動中,在單獨的活動中,在碎片或其他東西中。然而,在總體思路如下:

private class GetTableData extends AsyncTask<Void, Void, Void>{ 
    @Override 
    protected Void doInBackground(){ 
     //get data from your sever 
     return null; 
    } 


    protect void onPostExecute(Void result){ 
     //update the table view if version on server is newer 
    } 

你會將你的所有I/O方法,即那些連接到您的服務器和下載數據中doInBackground。您將把所有更新表格視圖的方法放在onPostExecute之內。這種分離是必要的,因爲I/O函數必須在Jellybean之後在後臺運行,必須從UI線程更新視圖。 (3)檢查您下載的內容的時間戳。如果你下載的是新的更新你的表格。您可以通過在有條件的statment簡單地添加到您的onPostExecute功能,使得

if(lastDownloadTime < lastUpdatedOnServerTime){ 
    //update view 
} 

根據您可能需要有多大的表文件是對剛剛返回時表的服務器的代碼添加一個功能acomplish這最後更新。這樣您就可以檢查上次下載表格的時間。如果表格在下載後在服務器上更新,則可以繼續下載新信息。

這就是基本的想法。你可以適應你自己的設置。

+0

但你的答案與同步行爲和效率無關?我已經檢查是否需要與最新數據同步,但是我的問題是如何檢查if(lastDownloadTime user2011736

+0

你還補充說上傳需要很長時間?最快的方法是隻下載和發佈已更改的字段。要做到這一點,您需要跟蹤表中每個可編輯值的最新更新時間。如果你的表是索引的,那麼它很容易只替換自鍵被全部修改後的值。 – Rarw

相關問題