0

私はXamarin.Androidアプリを開発中です。私はAzure Mobile Appに接続しており、EasyTableにデータを取得/保存しています。Azure Easy Tables init(?)はアプリケーションのある部分で失敗しますが、別の部分では成功します。何が起こっていますか?

ここでは、ユーザーのログインと登録のための私のコードです。これは単なるテストクエリなので、明らかに安全でないログインは気にしないでください:

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; 
     } 

ログインと初期化用です。ここにレジスターパーツがあります:

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(); 

     } 

これですべてが大丈夫です。ここで私は私のアプリから呼び出す方法は次のとおりです。

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; 
      } 

および登録:

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(); 
      } 

を私はAPKを持つ任意のデバイス上でこれをテストすると、ログインは失敗します。アプリはnullのUsers_Tableを受け取るため、ユーザー名とパスワードの間違ったメッセージが表示されます。

しかし、奇妙なことはこれです:レジスタは問題なく通過します。また、新しいユーザーを正常に登録すると、既存のユーザーと新しく作成されたユーザーのログインも行われます。これは、レジスタメソッドで何かが起こって、何かへの接続を開始するようなものです。

これを体験したことがありますか?何が起こっていますか?

答えて

0

私はそれがとても似例えばログインを行う、任意のプロセスの前に)(syncusersを追加することで働かせた:

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; 
    } 
関連する問題