2016-05-14 40 views
0

我有一個應用程序在Android智能手機上運行並連接到天藍色的移動服務後端(基於節點js)。基本上我所做的是將數據插入移動服務數據庫中的表格。在移動應用程序中,插入我的對象後,我檢查響應對象是否具有與空值不同的id,在這種情況下,我刪除本地sqlite數據庫中的行,如果id等於「null」,則稍後重試操作。問題是,我經常沒有收到id,所以id =「null」,然後重試操作,但是在獲取azure數據庫時,行已成功插入。從Azure移動服務插入後在移動客戶端獲得響應的最終問題

這裏是我的代碼部分:

if (downeventstable == null && !error) 
    downeventstable = FirstmenuScreen.mClient.getTable("downevents" + servicio, downevents.class); 

boolean error2 = true; 

try { 
    downeventstable.insert(dwnevent).get(); 
    error2=false; 
     } catch (Exception e) {     
       error2 = true; 
        break; 
        } 


if (!error2 && dwnevent.getId() != null) { 
         // if no error and id was received deletes row locally in sqlite 
        } 

我想這個問題是由移動網絡的質量差造成的,也許應用程序失去了蔚藍的一個全成插入後連接,並沒有得到響應對象。我如何知道數據是否插入天藍色並處理這些情況?

回答

1

如果您的插入成功,並且您嘗試在以後重新插入具有相同ID的相同記錄,則會發生409個衝突。如果您使用的是脫機同步,則可以在同步衝突處理程序中處理此問題,如果您使用的是常規表,則只需執行異常處理。

這裏是一個Xamarin sample that handles the 409 conflict,這是在C#中的MobileServiceConflictException。你會在Java中做類似的事情。你可以用REST客戶端測試一下,看到你得到了一個409.

順便說一句,這聽起來像你正在用自己的SQLite表進行大量的手動工作。您可能需要考慮使用內置的脫機同步功能,該功能將爲您執行重試:Add Offline Data Sync to your Android Mobile Services app

請注意,移動服務已被棄用,所以我們建議您將代碼升級到移動應用程序,如果它是一個新的應用程序。見Announcing Azure Mobile Services transition to Azure App Service

+0

謝謝,的確,我正在使用常規表手動執行表同步,很高興能夠聽到關於脫機同步功能的信息!由於行ID是由azure後端(默認ID生成器腳本)定義的,因此我沒有得到409個結果代碼,可能在應用程序中設置ID以便記錄在ID重複時被拒絕是一個好主意。 –

相關問題