从天蓝色移动服务插入后,在移动客户端中获得响应的最终问题

时间:2016-05-14 00:15:11

标签: android azure request response azure-mobile-services

我有一个在Android移动智能手机上运行的应用程序,并连接到azure移动服务后端(基于节点js)。基本上我所做的是将数据插入移动服务数据库中的表。在移动应用程序中,插入我的对象后,我检查响应对象的id是否为null,在这种情况下,我删除本地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
                    }

我猜这个问题是由于移动网络的质量不好造成的,也许应用程序在成功插入azure后失去连接并且没有得到响应对象。我如何知道数据是否插入天蓝色并处理这些情况?

1 个答案:

答案 0 :(得分:1)

如果您的插入成功并且您尝试稍后使用相同的ID重新插入相同的记录,则会发生409冲突。如果您正在使用离线同步,则可以在同步冲突处理程序中处理此问题,如果您使用常规表,则可以处理异常处理。

这里是Xamarin sample that handles the 409 conflict,在C#中是// cash stands for chaos hash :D int cash(int x, int y){ int h = seed + x*374761393 + y*668265263; //all constants are prime h = (h^(h >> 13))*1274126177; return h^(h >> 16); } 。你会在Java中做类似的事情。您可以使用REST客户端测试这一点,并看到您获得了409.

不过,听起来你正在用你自己的SQLite表进行大量的手工操作。您可能需要考虑使用内置的离线同步功能,该功能将为您重试:Add Offline Data Sync to your Android Mobile Services app

请注意,不推荐使用移动服务,因此我们建议您将代码升级为移动应用(如果它是新应用)。请参阅Announcing Azure Mobile Services transition to Azure App Service