Recentemente ho iniziato a sviluppare un app Android e ha deciso di utilizzare Retrofit come un client di un servizio REST, ma non sono sicuro se il mio approccio è buono:chiamata Retrofit all'interno AsyncTask
i. Ho implementato una chiamata asincrona alla mia API, che viene chiamata all'interno del metodo doInBackground di AsyncTask. Il riguarda: aver letto this article mi ha confuso. Non sono AsyncTasks adatti a questo tipo di attività? Devo effettuare la chiamata all'API direttamente dall'attività? Comprendo che i metodi di callback di Retrofit sono eseguiti sul thread dell'interfaccia utente, ma che dire della chiamata su HTTP? Retrofit crea thread per questo?
ii. Voglio che AuthenticationResponse venga salvato all'interno di un oggetto SharedPreferences, che non sembra essere disponibile all'interno del metodo di successo del callback. Qualche suggerimento/buona pratica?
Grazie in anticipo :)
Ecco il mio 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;
}
Grazie mille per la tua risposta Konrad. Non ero sicuro di cosa stesse facendo Retrofit dietro le quinte.All'inizio stavo facendo la chiamata di rete in un AsyncTask che è un po 'eccessivo e difficile accedere all'istanza SharedPreferences. Risposta molto buona e informativa – user3159152
Benvenuto Sono felice di poterti aiutare. Se è utile per te, per favore accettalo. Contrassegna la casella di controllo –
spiegazione molto buona. – Andrain