我正在为我的 Android 应用程序实现移动服务以连接到 azure。我已经完成了离线同步教程,效果很好。
我现在尝试在我的应用程序中使用不同的表实现相同的方法,但出现推送异常。有趣的是,它仍然被插入到在线数据库中。有人知道为什么会发生这种情况吗?
作为测试,我在 ToDoItem 项目中实现了相同的类、表等,没有出现错误。
下面的异常
W/System.err: java.util.concurrent.ExecutionException: com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException
W/System.err: at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299)
W/System.err: at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286)
W/System.err: at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
W/System.err: at com.heathrow.ecms.DatabaseAccess$3.doInBackground(DatabaseAccess.java:2178)
W/System.err: at com.heathrow.ecms.DatabaseAccess$3.doInBackground(DatabaseAccess.java:2173)
W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:292)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err: at java.lang.Thread.run(Thread.java:818)
W/System.err: Caused by: com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException
W/System.err: at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext.pushOperations(MobileServiceSyncContext.java:959)
W/System.err: at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext.consumePushSR(MobileServiceSyncContext.java:859)
W/System.err: at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext.access$1100(MobileServiceSyncContext.java:83)
W/System.err: at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext$PushSyncRequestConsumer.run(MobileServiceSyncContext.java:1120)
同步代码与教程中的完全相同,但使用不同的表,错误出现在推送线上。
private AsyncTask<Void, Void, Void> sync() {
AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>(){
@Override
protected Void doInBackground(Void... params) {
try {
MobileServiceSyncContext syncContext = mClient.getSyncContext();
syncContext.push().get();
mtblAttachment.pull(null).get();
} catch (final Exception e) {
e.printStackTrace();
}
return null;
}
};
return runAsyncTask(task);
}
最佳答案
好吧,在我昨天发表最后一条评论之后,我已经解决了这个问题。
类中的 SerializedName 字段必须与您在 initLocalDatabase 中放入的内容匹配(区分大小写)。尽管此错误没有出现在我对 ToDoItem 应用程序的测试运行中,但当我在实际应用程序中实现它时,它却出现了。
因此,如果您收到 MobileServicePushFailedException,请检查您的 SerializedName 字段是否与本地数据库字段名称匹配。由于某种原因,它不会影响 Azure 数据库字段,这就是为什么我看到我的数据转到 Azure 而不是我的本地数据库。最佳实践使所有字段完全相同(认为我当时很懒!)。
关于android - MobileServicePushFailedException Azure Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43809800/