0

Je travaille sur une application Xamarin.Android. Je me connecte à une application mobile Azure et j'obtiens/stocke des données dans un EasyTable.Azure Easy Tables init (?) Échoue sur une partie de l'application mais réussit sur une autre. Que ce passe-t-il?

Maintenant, voici mon code pour l'utilisateur 'login' et l'enregistrement. Ce ne sont que des requêtes de test alors ne me dérange pas le login évidemment unsecure:

public async Task Initialize() 
     { 
      MobileService = new MobileServiceClient(myappwebsiteinazurestring); 

      string path = Path.Combine(MobileServiceClient.DefaultDatabasePath, "UserSync.db"); 
      var store = new MobileServiceSQLiteStore(path); 
      store.DefineTable<Users_Table>(); 
      await MobileService.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler()); 
      userTable = MobileService.GetSyncTable<Users_Table>(); 
     } 

     public async Task SyncUsers() 
     { 
      await userTable.PullAsync("Users_Table", userTable.CreateQuery()); 
      await MobileService.SyncContext.PushAsync(); 
     } 

     public async Task<List<Users_Table>> loginUser(string username, string password) 
     { 
      List<Users_Table> userLogin = await userTable 
       .Where(user => user.Username == username && user.Password == password) 
       .ToListAsync(); 
      await MobileService.SyncContext.PushAsync(); 
      return userLogin; 
     } 

C'est pour la connexion et l'initialisation. Maintenant, voici la partie de registre:

public async Task AddUser(Users_Table user) 
     { 
      var InsUser = new Users_Table 
      { 
       Name = user.Name, 
       Username = user.Username, 
       Password = user.Password, 
       LicensePlate = user.LicensePlate, 
       Email = user.Email, 
       Exp = user.Exp 
      }; 

      await userTable.InsertAsync(InsUser); 
      await SyncUsers(); 

     } 

Maintenant c'est très bien et tout. Voici comment je les appelle de mon application:

private async void LoginButton_Click(object sender, EventArgs e) 
     { 

      EditText username = FindViewById<EditText>(Resource.Id.LoginEditTextUsername); 
      EditText password = FindViewById<EditText>(Resource.Id.LoginEditTextPassword); 

      var prog = new ProgressDialog(this); 
      prog.SetMessage("Logging in..."); 
      prog.Show(); 
      AzureDataService az = new AzureDataService(); 
      List<Users_Table> user = new List<Users_Table>(); 

      try 
      { 
       await az.Initialize(); 
       user = await az.loginUser(username.Text, password.Text); 
      } 
      catch (Exception ex) 
      { 

       Toast.MakeText(this.ApplicationContext, "Error: " + ex.Message + "\n" + ex.Source, ToastLength.Long).Show(); 
       return; 
      } 

Et l'inscription:

private async void CreateProfile() 
     { 
      EditText regUsername = FindViewById<EditText>(Resource.Id.RegisterLayoutUsername); 
      EditText regPassword = FindViewById<EditText>(Resource.Id.RegisterLayoutPassword); 
      EditText regConfirmPassword = FindViewById<EditText>(Resource.Id.RegisterLayoutConfirmPassword); 
      EditText regPlateNumber = FindViewById<EditText>(Resource.Id.RegisterLayoutPlateNumber); 
      EditText regEmail = FindViewById<EditText>(Resource.Id.RegisterLayoutEmail); 
      EditText regName = FindViewById<EditText>(Resource.Id.RegisterLayoutName); 

      var user = new Users_Table 
      { 
       Username = regUsername.Text, 
       Password = regPassword.Text, 
       LicensePlate = parseLicensePlate(regPlateNumber.Text), 
       Name = regName.Text, 
       Email = regEmail.Text, 
       Exp = 0 
      }; 

      try 
      { 
       var pd = new ProgressDialog(this); 
       pd.SetMessage("Creating Profile..."); 
       pd.Show(); 
       AzureDataService az = new AzureDataService(); 
       await az.Initialize(); 
       await az.AddUser(user); 
       pd.Dismiss(); 
      } 

Une fois que je teste cela sur tout appareil avec l'APK, la connexion échoue. L'application reçoit un null Users_Table et affiche donc le nom d'utilisateur/mot de passe message incorrect. Cependant, la chose la plus étrange est la suivante: le registre fonctionne sans problème. Et une fois que j'ai réussi à enregistrer un nouvel utilisateur, la connexion se poursuit, pour les utilisateurs existants et ceux qui viennent d'être créés. C'est comme si quelque chose se passait dans la méthode du registre qui déclenche la connexion à quoi que ce soit.

Quelqu'un a-t-il déjà ressenti cela? Que ce passe-t-il?

Répondre

0

je l'ai fait travailler en ajoutant les syncusers() avant tout processus, ce qui rend la connexion par exemple comme ceci:

public async Task<List<Users_Table>> loginUser(string username, string password) 
    { 



     await SyncUsers();//here 
     List<Users_Table> userLogin = await userTable 
      .Where(user => user.Username == username && user.Password == password) 
      .ToListAsync(); 
     await MobileService.SyncContext.PushAsync(); 
     return userLogin; 
    }