2017-08-16 52 views
0

我已經實現了一個支持Azure移動服務和離線同步的Android應用程序。我一直在用兩種不同的設備進行測試。我在第一臺設備上執行刪除操作(軟刪除),並且工作正常。然後讓它同步,檢查服務器端記錄,確認刪除列有'true'標記。但我似乎無法讓第二個平板電腦同步以反映新的更改,即不顯示已刪除的記錄。Android Azure移動服務離線同步軟刪除

要啓用軟刪除,我已將enableSoftDelete:true添加到Azure上應用程序服務上的表控制器中。我沒有感動我的應用程序中刪除過程的條件,但下面是一個典型的刪除:

Save save = getSave(SaveID); 
try { 
      mtblSave.delete(save); 
      return true; 

     } catch (Exception exception) { 
      exception.printStackTrace(); 
      return false; 
     } 

我使用.NET後端與Azure中的SQL Server。

任何想法?

在此先感謝

回答

0

但我似乎無法獲得第二個平板電腦進行同步,以反映新的變化,即不顯示已刪除的記錄。

正如提到Using soft delete in Mobile Services如下:

當使用Offline data Sync for Mobile Services功能,客戶端SDK會自動查詢已刪除的記錄,並從本地數據庫刪除它們。如果未啓用軟刪除,則需要在後端編寫其他代碼,以便客戶端SDK知道要從本地存儲中刪除哪些記錄。否則,客戶端本地存儲和後端將與這些已刪除記錄相關不一致,必須調用客戶端方法PurgeAsync()才能清除本地存儲。

我認爲您可以利用捕捉網絡跟蹤處理拉操作。另外,如下所示,在構建用於抽取數據的查詢時,可以添加includeDeleted方法,以便更好地理解此功能。

var pullQuery = mClient.getTable(ToDoItem.class).where().field("complete").eq(false).includeDeleted(); 
mToDoTable.pull(mPullQuery).get(); 

此外,對於有關移動服務使用離線數據同步的詳細信息,你可以參考here

UPDATE:

查詢參數是可選的查詢,以篩選結果。

由於How offline synchronization works提及增量同步

如果你使用一個非空queryId,在Azure移動SDK執行增量同步。每當pull操作返回一組結果時,該結果集中的最新updatedAt時間戳就存儲在SDK本地系統表中。隨後的拉取操作僅在該時間戳後檢索記錄。

查詢名稱可以是您選擇的任何字符串,但它對於您的應用中的每個邏輯查詢必須是唯一的。否則,不同的拉操作可能會覆蓋相同的增量同步時間戳,並且您的查詢可能會返回不正確的結果

您可以參考此answer並解決您的問題。

+0

我真的以爲我發現了這個問題。我將同步方法從'mtblSave.pull(null,「tblsave」)。get();'改爲'mtblSave.pull(null).get();'並且它將所有更改的記錄拖下來。該代碼不工作是我認爲會工作的增量同步。我的增量同步代碼有問題嗎?我是否需要實際提出查詢? – SliderUK

+0

我更新了我的答案,你可以參考解釋。 –

+0

嗨,謝謝你,但我不完全理解你以粗體顯示的部分。使用'mtblSave.pull(null,「tblsave」)。get();'是不是一個唯一的'tblSave'的queryid,所以當它再次被調用時它會檢查updatedAt?我使用的方法與其他答案中提到的方法有什麼不同?await coffeeTable.PullAsync(「allCoffees」,coffeeTable.CreateQuery());'? – SliderUK

相關問題