Android Azure 离线同步 - 未完成同步
Android Azure Offline Sync - Not completing sync
我有一个带有 Azure 移动服务并实现了离线同步的 android 应用程序。该应用程序运行良好,但在同步数据时似乎未完成,因此表格中总是有几行未同步?
任何人都知道问题可能出在哪里。我相信在下一次尝试时它会在停止的地方完成,还是我错了?
提前致谢
The app works well but when syncing data it seems not to complete so there is always a few rows on tables which have not synced?
我建议您在处理同步操作时使用 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 会发送多个请求以从关联的远程 table 中提取与给定查询匹配的所有项目。此外,您需要确保在查询中指定 includeDeleted()
。
综上所述,您需要确保可以通过上述请求检索到所有项目。此外,如果拉取操作有待处理的本地更新,则拉取操作将首先执行推送操作。所以,我假设你可以在调用 pull 操作来处理冲突解决时捕获异常。
Bruce 的回答很好,但我使用了稍微不同的方法,无需使用 fiddler。
我从这个改变我的连接
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 连接的日志记录方法,并在日志中显示请求。
我有一个带有 Azure 移动服务并实现了离线同步的 android 应用程序。该应用程序运行良好,但在同步数据时似乎未完成,因此表格中总是有几行未同步?
任何人都知道问题可能出在哪里。我相信在下一次尝试时它会在停止的地方完成,还是我错了?
提前致谢
The app works well but when syncing data it seems not to complete so there is always a few rows on tables which have not synced?
我建议您在处理同步操作时使用 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 会发送多个请求以从关联的远程 table 中提取与给定查询匹配的所有项目。此外,您需要确保在查询中指定 includeDeleted()
。
综上所述,您需要确保可以通过上述请求检索到所有项目。此外,如果拉取操作有待处理的本地更新,则拉取操作将首先执行推送操作。所以,我假设你可以在调用 pull 操作来处理冲突解决时捕获异常。
Bruce 的回答很好,但我使用了稍微不同的方法,无需使用 fiddler。
我从这个改变我的连接
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 连接的日志记录方法,并在日志中显示请求。