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 而不是我的本地数据库。最佳实践使所有字段完全相同(认为我当时很懒!)。
我正在为我的 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 而不是我的本地数据库。最佳实践使所有字段完全相同(认为我当时很懒!)。