2016-11-23 102 views
0

我想在android中使用Stormpath框架的登錄屏幕。我使用了android studio中提供的標準登錄屏幕,並且只修改了UserLoginTask。我的問題是,它似乎並沒有等待我的電話Stormpath完成。一旦這個類被調用,它會直接執行doInBackground,然後直接執行onPostExecute。這裏是我的課:doInTheBackground不等功能完成?

public class UserLoginTask extends AsyncTask<Void, Void, Boolean> { 

     private final String mEmail; 
     private final String mPassword; 
     private boolean loginResult; 
     String errorMessage; 


     UserLoginTask(String email, String password) { 
      mEmail = email; 
      mPassword = password; 
     } 

     @Override 
     protected Boolean doInBackground(Void... params) { 
      Stormpath.login(mEmail, mPassword, new StormpathCallback<Void>() { 
       @Override 
       public void onSuccess(Void aVoid) { 
        Log.d("debug", "sucess"); 
        loginResult = true; 
       } 

       @Override 
       public void onFailure(StormpathError error) { 
        errorMessage = error.message(); 
        Log.d("debug", "Error: " + error.message()); 
        loginResult = false; 
       } 
      }); 
      return loginResult; 
     } 

     @Override 
     protected void onPostExecute(final Boolean success) { 
      mAuthTask = null; 
      showProgress(false); 

      if (success) { 
       finish(); 
      } else { 
       Toast.makeText(LoginActivity.this, errorMessage, Toast.LENGTH_SHORT).show(); 
       mPasswordView.setError(getString(R.string.error_incorrect_password)); 
       mPasswordView.requestFocus(); 
      } 
     } 

     @Override 
     protected void onCancelled() { 
      mAuthTask = null; 
      showProgress(false); 
     } 
    } 
+4

'Stormpath.login()'使用回調函數,因此它看起來已經在後臺線程上執行網絡調用,並通過回調返回結果。如果這是真的,那麼在這種情況下你不需要'AsyncTask'。 – Egor

+0

爲什麼要等待? 'login()'是一個異步調用,它不會阻塞調用線程。 – earthw0rmjim

+0

@Egor謝謝你可以把它寫成一篇文章,所以我可以驗證它作爲一個答案 –

回答

1

由於Stormpath.login()使用回調,很有可能它已經在做網絡調用在後臺線程,並通過回調將返回結果。如果是這種情況,那麼你並不需要AsyncTask