wszyscy.Asynchroniczne uwierzytelnianie konta z Volley
Wdrażam konto uwierzytelniające przy użyciu AbstractAccountAuthenticator i potrzebuję wywołać metodę asynchroniczną w funkcji getAuthToken, aby uwierzytelnić użytkownika. Mój kod to tak:
public class AccountAuthenticator extends AbstractAccountAuthenticator {
...
@Override
public Bundle getAuthToken(final AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options)
throws NetworkErrorException
{
final AccountManager accountManager = AccountManager.get(context);
String authToken = accountManager.peekAuthToken(account, authTokenType);
// !!!!
if(TextUtils.isEmpty(authToken)) {
<<call asynchronous method to acquire token>>
return null;
}
// !!!!
final Bundle result = new Bundle();
result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
result.putString(AccountManager.KEY_AUTHTOKEN, authToken);
return result;
}
...
}
Według dokumentacji Google na metodzie „getAuthToken”: zwraca wynik Bundle lub null, jeśli wynik ma być zwrócony przez odpowiedź. Wynik będzie zawierać albo:
• AccountManager.KEY_INTENT
lub
• AccountManager.KEY_ACCOUNT_NAME
, AccountManager.KEY_ACCOUNT_TYPE
i AccountManager.KEY_AUTHTOKEN
lub
• AccountManager.KEY_ERROR_CODE
i AccountManager.KEY_ERROR_MESSAGE
wskazać błąd
I muszę zwróci null ponieważ metody Authenticator jest asynchroniczny, ale w jaki sposób zwracam pakiet za pomocą parametru "odpowiedzi", zgodnie z dokumentacją?
Dziękuję za wszystko i przepraszam za angielski.
dziękuję, ale zwrot null i OnResponse przebiegają przez różne wątki !!!! – SanatiSharif
@SanatiSharif Bez problemu! Argument "odpowiedź" to facet od którego zwrócisz odpowiedź. Używa się go naprawdę do tego, kiedy twoja metoda nie może natychmiast wrócić. Na przykład zobacz linie: 'response.onResult (result)'; oraz 'response.onError (result);' – Luciano