[英]Android Login with Azure Mobile Services
我在使用Azure移动服务使用Android创建登录功能时遇到问题。 当我尝试使用以前创建的用户登录时,它告诉我密码不正确,但是当我之后立即使用相同的凭据再次登录时,它使我可以访问下一个活动。
这是我用来连接到Azure移动服务的代码
// Connect client to azure
try {
mClient = new MobileServiceClient(
"URL",
"App Key",
this
);
mUserTable = mClient.getTable(User.class);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是我尝试登录时执行的代码
public class UserLoginTask extends AsyncTask<Void, Void, Boolean>
{
@Override
protected Boolean doInBackground(Void... params)
{
mUserTable.where().field("email").eq(user.getEmail()).execute(new TableQueryCallback<User>()
{
public void onCompleted(List<User> result, int count, Exception exception, ServiceFilterResponse response) {
if (exception == null) {
for (User u : result) {
if(user.getPassword().equals(u.getPassword()))
{
grantAccess = true;
}
else
{
grantAccess = false;
}
}
} else {
grantAccess= false;
}
}
});
return grantAccess;
}
@Override
protected void onPostExecute(final Boolean success)
{
mAuthTask = null;
showProgress(false);
if (success == true)
{
// Finish this activity
finish();
// Start the main activity
Intent i = new Intent(getApplicationContext(),
MainActivity.class);
startActivity(i);
}
else
{
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
@Override
protected void onCancelled()
{
mAuthTask = null;
showProgress(false);
}
}
}
问题在于您如何调用移动服务来读取用户表。 您无需将其包装在AsyncTask中。 默认情况下,Mobile Services SDK将为您完成此操作。 从服务器返回结果时,将调用在TableQueryCallback内部实现的onCompleted方法。 这意味着(最可能)在调用onPostExecute方法之后将调用回调。 让我尝试绘制流程图:
-查询用户表
---- SDK通过回调启动查询任务
-继续执行UserLoginTask
-调用UserLoginTask的onPostExecute
然后在服务器响应的某个单独时间点,将调用您的回调。 要解决此问题,我建议您摆脱异步任务。 同样,将onPostExecute中拥有的所有内容都放入回调方法中,因为一旦您从移动服务获得响应,该方法就会被调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.