MobileServicePushFailedException Azure Android

MobileServicePushFailedException Azure Android

我正在为我的 Android 应用程序实施移动服务以连接到 Azure。我已经 运行 完成了离线同步教程并且效果很好。

我现在尝试在我的应用程序中使用不同的 table 实现相同的方法,但我收到了推送异常。有趣的是,它仍然被插入到在线数据库中。有人知道为什么会这样吗?

作为测试,我在 ToDoItem 项目中实现了相同的 class、tables 等,没有出现错误。

以下异常

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.doInBackground(DatabaseAccess.java:2178)
W/System.err:     at com.heathrow.ecms.DatabaseAccess.doInBackground(DatabaseAccess.java:2173)
W/System.err:     at android.os.AsyncTask.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.access00(MobileServiceSyncContext.java:83)
W/System.err:     at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext$PushSyncRequestConsumer.run(MobileServiceSyncContext.java:1120)

同步的代码与教程中的完全相同,但有不同table,错误在推送线上。

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);
}

好的,在我昨天发表最后一条评论后,我已经解决了问题。

class 中的 SerializedName 字段必须与您放入 initLocalDatabase 的内容匹配(区分大小写)。尽管这个错误没有出现在我在 ToDoItem 应用程序上的测试 运行 中,但当我在我的实际应用程序中实现它时它出现了。

因此,如果您收到 MobileServicePushFailedException,请检查您的 SerializedName 字段是否与您的本地数据库字段名称匹配。出于某种原因,它不会影响 Azure 数据库字段,这就是为什么我看到我的数据进入 Azure 而不是我的本地数据库。最佳实践使所有字段完全相同(认为我当时很懒!)。