Android Azure离线同步 - 未完成同步

时间:2017-11-06 11:37:19

标签: android azure synchronization azure-mobile-services

我有一个带有Azure移动服务的Android应用程序,并实现了脱机同步。该应用程序运行良好,但在同步数据时似乎没有完成,所以表格上总有几行没有同步?

任何人都有任何想法可能是什么问题。我相信在接下来的尝试中,它会在它停止的地方完成,或者我错了吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

  

该应用程序运行良好,但在同步数据时似乎没有完成,所以表格上总有几行没有同步?

我建议您在处理同步操作时使用fiddler来捕获网络跟踪。

对于Incremental Sync,请求如下:

Get https://{your-app-name}.azurewebsites.net/tables/TodoItem?$filter=(updatedAt%20ge%20datetimeoffset'2017-11-03T06%3A56%3A44.4590000%2B00%3A00')&$orderby=updatedAt&$skip=0&$top=50&__includeDeleted=true 

如果选择退出增量同步,您将检索所有没有过滤器updatedAt的记录。

Get https://{your-app-name}.azurewebsites.net/tables/TodoItem?$skip=0&$top=50&__includeDeleted=true 

注意:如果项目太多,SDK会发送多个请求以从关联的远程表中提取与您的给定查询匹配的所有项目。此外,您需要确保在查询中指定includeDeleted()

总之,您需要确保可以通过上述请求检索所有项目。另外,如果拉动操作具有待定的本地更新,则拉动操作将首先执行推动操作。因此,我假设您可以在调用pull操作来处理冲突解决时捕获异常。

答案 1 :(得分:0)

布鲁斯的答案很好,但我使用的方法略有不同,不需要使用小提琴手。

我改变了我的连接

mClient = new MobileServiceClient("[AZUREWEBSITE]", cntxall);
                mClient.setAndroidHttpClientFactory(new MyOkHttpClientFactory());

到此

mClient = new MobileServiceClient("[AZUREWEBSITE]", cntxall).withFilter(
                        new ServiceFilter() {
                            @Override
                            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilter) {
                                // Get the request contents
                                String url = request.getUrl();
                                String content = request.getContent();

                                if (url != null) {
                                    Log.d("Request URL:", url);
                                }

                                if (content != null) {
                                    Log.d("Request Content:", content);
                                }

                                // Execute the next service filter in the chain
                                ListenableFuture<ServiceFilterResponse> responseFuture = nextServiceFilter.onNext(request);

                                Futures.addCallback(responseFuture, new FutureCallback<ServiceFilterResponse>() {
                                    @Override
                                    public void onFailure(Throwable e) {
                                        Log.d("Exception:", e.getMessage());
                                    }

                                    @Override
                                    public void onSuccess(ServiceFilterResponse response) {
                                        if (response != null && response.getContent() != null) {
                                            Log.d("Response Content:", response.getContent());
                                        }
                                    }
                                });

                                return responseFuture;
                            }
                        }
                );

这是Azure连接的日志记录方法,并在日志中显示请求。