Rénovation appeler à l'intérieur de AsyncTask
J'ai récemment commencé à développer une application Android et décidé de l'utiliser de Rénovation en tant que client d'un service REST, mais je ne sais pas si ma démarche est la bonne:
je. J'ai mis en place un appel asynchrone à mon api, qui est appelée à l'intérieur d'AsyncTask de la méthode doInBackground. Le préoccupation: après avoir lu cet article me confondre. Ne sont pas AsyncTasks adapté pour ce genre de tâches? Devrais-je faire l'appel à l'API directement à partir de l'Activité? Je comprends que la Rénovation de méthodes de rappel sont exécutés sur le thread de l'INTERFACE utilisateur, mais comment à propos de l'appel sur HTTP? Ne de Rénovation créer des threads pour qui?
ii. Je veux le AuthenticationResponse être enregistrées à l'intérieur d'un SharedPreferences objet, qui ne semble pas être disponible à l'intérieur de la réussite de la méthode de la fonction de rappel. Toutes les suggestions/bonnes pratiques?
Vous en remercie d'avance 🙂
Voici mon doInBackGroundMethod:
@Override
protected String doInBackground(String... params) {
Log.d(LOCATION_LOGIN_TASK_TAG, params[0]);
LocationApi.getInstance().auth(new AuthenticationRequest(params[0]), new Callback<AuthenticationResponse>() {
@Override
public void success(AuthenticationResponse authenticationResponse, Response response) {
Log.i("LOCATION_LOGIN_SUCCESS", "Successfully logged user into LocationAPI");
}
@Override
public void failure(RetrofitError error) {
Log.e("LOCATION_LOGIN_ERROR", "Error while authenticating user in the LocationAPI", error);
}
});
return null;
}
OriginalL'auteur user3159152 | 2015-03-28
Vous devez vous connecter pour publier un commentaire.
I. Rénovation prend en charge trois façons de faire une demande:
Vous devez déclarer méthode qui retourne la réponse sous forme de valeur par exemple:
Cette méthode est faite dans le thread dans lequel est appelé. Donc vous ne pouvez pas l'appeler dans le main/thread d'INTERFACE utilisateur.
Vous devez déclarer nulle la méthode qui contient de rappel avec réponse en dernier param par exemple:
L'exécution de la demande est appelée à new thread d'arrière-plan, et les méthodes de rappel sont effectuées dans le fil de la méthode est appelée. Vous pouvez donc appeler cette méthode dans la main/thread d'INTERFACE utilisateur sans fil/AsyncTask.
La dernière voie que je sais, c'est la méthode qui utilise RxAndroid. Vous devez déclarer méthode qui renvoie la réponse observable avec la valeur. Par exemple:
Cette méthode prend également en charge de rendre le réseau demande à nouveau thread. Si vous n'avez pas à créer un nouveau thread/AsyncTask. L'Action1 rappel de souscrire méthode est appelée dans l'INTERFACE utilisateur/thread principal.
II. Vous pouvez appeler votre méthode, juste en Activité et vous pouvez écrire vos données à SharedPreferences comme il est indiqué ci-dessous:
Bienvenue je suis contente d'avoir pu vous aider. Si il est utile pour vous s'il vous plaît accepter. Il vous suffit de cocher la case
très bonne explication.
Intéressting réponse sur rxjava. Donc, si je veux appeler 2 demandes, le 2ème appelé après la réponse de la première, est-il un moyen de s'inscrire pour le 1er rappel sur le même fil, la demande a été effectuée dans le but d'exécuter le 2ème sans avoir à le faire sur le thread principal, comme il le ferait avec l'habituel rappel sur un Appel?
Merci pour l'explication, claire et concise.
OriginalL'auteur Konrad Krakowiak