我已完成说明In this documentation要在我的Xamarin.Forms客户端上实现离线同步但是当我使用同步表提取数据时,我目前无法获取云中的数据,而是当我使用普通表读取数据时,我实际上正常接收数据,我不明白,这是我使用SYncTable获取数据的代码:
/// <summary>
/// Initialize offline sync
/// </summary>
/// <returns></returns>
public async Task InitializeAsync()
{
if(!_client.SyncContext.IsInitialized)
{
_store.DefineTable<T>();
await _client.SyncContext.InitializeAsync(_store, new MobileServiceSyncHandler());
await SyncOfflineCacheAsync();
}
}
public async Task SyncOfflineCacheAsync()
{
try
{
Debug.WriteLine("SyncOfflineCacheAsync: Initializing...");
await InitializeAsync();
// Push the Operations Queue to the mobile backend
Debug.WriteLine("SyncOfflineCacheAsync: Pushing Changes");
await _client.SyncContext.PushAsync();
// Pull each sync table
Debug.WriteLine("SyncOfflineCacheAsync: Pulling tags table");
_table = _client.GetSyncTable<T>();
string queryName = $"incsync_{typeof(T).Name}";
await _table.PullAsync(queryName, _table.CreateQuery());
}
catch (MobileServicePushFailedException e )
{
if (e.PushResult != null)
{
foreach (var error in e.PushResult.Errors)
{
await ResolveConflictAsync(error);
}
}
}
catch(Exception e)
{
throw e ;
}
}
我之前没有在线添加数据
但是当我获得没有离线同步的数据时,它运行良好
var data = await baseAzureMobileService.NormalTable.ReadAsync();
答案 0 :(得分:0)
AFAIK,增量同步请求如下所示:
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
时间戳将存储在本地SQLite数据库的__config
表中,如下所示:
注意: id列下的值格式等于deltaToken|{table-name}|{query-name}
。
我建议您捕获网络跟踪并检查本地表下的同步记录以缩小此问题。由于增量同步优化了请求而不是每次都检索所有记录,我建议您利用此功能。如果您的数据集较小或者您不关心带宽,则可以选择退出增量同步。
答案 1 :(得分:0)
尝试使用null调用PullAsync代替queryName,这将强制它获取所有记录,而不是尝试进行增量同步。