双击按钮使用AsyncTask登录?

时间:2016-03-02 21:21:42

标签: android

因此,让我们说用户输入正确的凭据,然后点击按钮进行登录,我必须单击两次才能登录。我认为这是因为我在AsyncTask的开头宣布它但我不确定

我希望它如何工作:用户输入正确的凭据,他们单击按钮,AsyncTask调用我的服务器并确保凭据正确并将变量设置为false(所以我知道登录工作)和然后活动就开始了。

AsyncTask代码:

public class BackgroundTask extends AsyncTask <String,Void,String> {
Context ctx;

public static boolean LOGIN_FAILED = true;

public static String Account;

BackgroundTask(Context ctx){
    this.ctx = ctx;
}

@Override
protected void onPreExecute() {

}


@Override
protected String doInBackground(String... params) {
//removed extra code here for the question. This is where i get result 
}


@Override
protected void onProgressUpdate(Void... values) {
    super.onProgressUpdate(values);
}


@Override
protected void onPostExecute(String result) {

    if(result.equals("Login failed...")){
        //If there email or password didn't match up in the DB then they couldn't log in.
        LOGIN_FAILED = true;
    }else{
        LOGIN_FAILED = false;

        if (result.equals("Welcome: Buyer")){
            Account = "Buyer";
        }else if(result.equals("Welcome: Seller")){
            Account = "Seller";
        }
    }
}
}

按钮代码(单击按钮时调用此方法):

public void startActivity() {
    //If the user gets the credentials right when they sign in then i start the activity.
    if (BackgroundTask.LOGIN_FAILED == false) {
        if (BackgroundTask.Account.equals("Buyer")) {
            startActivity(new Intent(getApplicationContext(), BuyerHomePage.class));

        } else if (BackgroundTask.Account.equals("Seller")) {

            startActivity(new Intent(getApplicationContext(), SellerHomePage.class));

        }

    }else if(BackgroundTask.LOGIN_FAILED == true){

        //A TOAST shows up (because the user couldn't connect) saying they messed up there email or password.
        Toast.makeText(SignInForm.this, "Email or password incorrect", Toast.LENGTH_SHORT).show();

    }
}

2 个答案:

答案 0 :(得分:1)

根据您共享的代码,您无处调用AsyncTask。

假设:假设在startActivity()中调用了异步。然后,如果您调用异步任务,则检查BackgroundTask.LOGIN_FAILED

的值

.... 那是错误的做法。异步将在后台发生,因此在任务完成之前,您的代码会检查BackgroundTask.LOGIN_FAILED。 正确的方法是在完成onPostExecute()

后开始您的活动

答案 1 :(得分:0)

在您的按钮中单击您正在开始活动,但在您的描述中,您指示您打电话给服务器。哪一个是正确的?在验证凭据之前,为什么要在按钮单击时启动活动?

此外,假设您的服务进行异步调用以验证凭据,您不需要异步任务来调用它,服务应立即从活动的“验证凭据”调用返回,并且一旦有验证凭据后,它应通过回调方法回调您的活动。