2016-05-14 5 views
0

私はアンドロイドモバイルスマートフォン上で動作し、azureモバイルサービスバックエンド(ノードjに基づく)に接続するアプリケーションを持っています。基本的には、モバイルサービスデータベースのテーブルにデータを挿入することです。モバイルアプリケーションでは、私のオブジェクトを挿入した後、レスポンスオブジェクトがnullと異なるIDを持っているかどうかをチェックします。その場合、ローカルのsqliteデータベースの行を削除します。idが "null"の場合、後で操作を再試行します。問題は頻繁にidを受け取らないので、id = "null"として操作を再試行しますが、空白のデータベースをフェッチすると、その行は正常に挿入されたということです。ここで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が得られるのを見てください。

Btw、自分のSQLiteテーブルで多くの手動作業をしているようです。組み込みのオフライン同期機能を使用することを検討してください。再試行はAdd Offline Data Sync to your Android Mobile Services appです。

モバイルサービスは廃止予定です。新しいアプリケーションの場合は、コードをモバイルアプリにアップグレードすることをおすすめします。 Announcing Azure Mobile Services transition to Azure App Serviceを参照してください。

+0

本当に私はテーブル同期を通常のテーブルを使って手動でやっています。オフライン同期機能について聞いてうれしいです!行IDが紺碧のバックエンド(デフォルトのIDジェネレータスクリプト)によって定義されているため、私は409の結果コードを取得していません。IDが重複したときにレコードが拒否されるように、アプリでIDを設定することをお勧めします。 –

関連する問題