2017-12-10 14 views
0

Ich arbeite mit Azure Mobile Services für meine Xamarin.iOS-App. Ich habe meinen App-Service sowohl im Backend als auch auf der Client-Seite eingerichtet und kann erfolgreich ein Konto in meiner App registrieren und den Eintrag in der entsprechenden Tabelle im Backend sehen.Azure Mobile Services - IMobileServiceSyncTable PullAsync füllt keine lokale Synchronisierungstabelle

Wenn ich versuche, die lokale Synchronisierungstabelle mit dem Aufruf PullAsync aufzufüllen, ist die Synchronisierungstabelle jedoch immer leer, auch wenn ich versuche, alle Datensätze in dieser Tabelle zurückzugeben, ohne Filter in meiner Abfrage zu verwenden.

Ich bin mir nicht sicher, warum die PullAsync meine Synchronisierungstabellen nicht füllt, auch wenn es keine Ausnahmen gibt.

Unten ist mein Code:

Initialisieren des Local Store

public class AzureMobileClientServiceDataManager : IAzureMobileClientServiceDataManager, IMobileServiceSyncHandler 
{ 

    const string localDbPath = "sample.db"; 
    MobileServiceSQLiteStore store; 

    MobileServiceClient client { get; set; } 

    public AzureMobileClientServiceDataManager(IAzureMobileClientService azureMobileClientService) 
    { 
     CurrentPlatform.Init(); 

     SQLitePCL.CurrentPlatform.Init(); 

     //Initialize the Mobile service client with the Mobile App URL,Gatewaty URL and Key 
     client = azureMobileClientService.GetMobileServiceClientInstance(); 
    } 

    public async Task InitializeStoreAsync() 
    { 
     store = new MobileServiceSQLiteStore(localDbPath); 
     store.DefineTable<Account>(); 
     store.DefineTable<UserProfile>(); 
     store.DefineTable<Purchase>(); 

     await client.SyncContext.InitializeAsync(store, this); 

    } 

    public MobileServiceClient GetInstance() 
    { 
     return client; 
    } 

    public Task OnPushCompleteAsync(MobileServicePushCompletionResult result) 
    { 
     foreach (var error in result.Errors) 
     { 
      Console.WriteLine("Error :" + error.RawResult); 
     } 

     return Task.FromResult(0); 
    } 

    public Task<JObject> ExecuteTableOperationAsync(IMobileServiceTableOperation operation) 
    { 
     return operation.ExecuteAsync(); 
    } 
} 

public interface IAzureMobileClientServiceDataManager 
{ 
    Task InitializeStoreAsync(); 

    MobileServiceClient GetInstance(); 

} 

Gleich nach einer erfolgreichen Registrierung eines neuen Benutzers, nenne ich diese Funktion meine Tabellen zu füllen.

public async Task<Result<bool>> PopulateData() 
    { 
     try{ 

     await accountTable.PullAsync("localAccount", accountTable.Where(ac => ac.Id == mobileServiceClient.CurrentUser.UserId)); 
     await userProfileTable.PullAsync("localUserProfile", userProfileTable.Where(up => up.AccountId == mobileServiceClient.CurrentUser.UserId)); 


     return Result<bool>.Success(true); 

    }catch(Exception ex) 
     { 
      return Result<bool>.Failure(ex, ex.StackTrace); 
     } 

    } 

Antwort

0

Haben Sie einen azuredatamanager pro Tabelle? Wenn dem so ist, werden Sie Probleme bekommen. Der MobileServiceClient soll global sein, und Sie stoßen auf Probleme mit mehreren Tabellen, wenn Sie die Tabelle jedes Mal neu initialisieren.

Versuchen Sie auch, Protokollierung SQLite Speicher Ihrer App hinzufügen, die alle lokalen Datenbank Aussagen protokolliert, hier ein Beispiel: https://github.com/Azure-Samples/app-service-mobile-dotnet-todo-list-files/blob/master/src/client/MobileAppsFilesSample/Helpers/LoggingHandler.cs

Verwandte Themen