我有一个在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后失去连接并且没有得到响应对象。我如何知道数据是否插入天蓝色并处理这些情况?
答案 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.
请注意,不推荐使用移动服务,因此我们建议您将代码升级为移动应用(如果它是新应用)。请参阅Announcing Azure Mobile Services transition to Azure App Service。