繁体   English   中英

使用Azure移动服务进行Android登录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM