J'utilise l'architecture propre et la couche de modèle a un référentiel, une interface de mise à niveau et une classe qui implémente le référentiel et crée le service de mise à niveau. J'utilise cet exemple: https://github.com/saulmm/AvengersComment utiliser SharedPreferences et Context dans la couche de modèle d'Android?
Voici les classes: Rénovation service api
public interface ApiService {
@GET("api/events")
Observable<List<Event>> getEvents();
@GET("api/event/{id}")
Observable<Event> getEvent(@Path("id") int id);
@Multipart()
@POST("api/events")
Observable<Event> postEvent(@Part("venue") Venue venue,
@Part RequestBody image,
@PartMap Map<String, RequestBody> params
);
}
dépôt
public interface WyatRepository {
Observable<List<Event>> getEvents();
Observable<Event> getEvent(int id);
Observable<Event> postEvent(Venue venue, String path, Map map);
}
et la classe source de données reste:
public class RestDataSource implements WyatRepository {
public final static String ENDPOINT = "http://xxxxxxxx.com/";
private final ApiService apiService;
public RestDataSource() {
OkHttpClient client = new OkHttpClient();
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
client.interceptors().add(loggingInterceptor);
client.interceptors().add(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original =chain.request();
Request request = original.newBuilder().header("Authorization",new SharedPreferencesUtil(getBaseContext()).getToken)
.method(original.method(),original.body())
.build();
return null;
}
});
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ENDPOINT)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(client)
.build();
apiService = retrofit.create(ApiService.class);
}
@Override
public Observable<Album> getAlbum(int id) {
return apiService.getAlbum(id);
}
@Override
public Observable<List<Event>> getEvents() {
return apiService.getEvents();
}
@Override
public Observable<Event> getEvent(int id) {
return apiService.getEvent(id);
}
Mon question est dans la dernière classe où dans le constructeur I J'utilise SharedPrefences, mais une erreur se produit car je ne peux pas utiliser le contexte android ou SharedPreferences pour obtenir le jeton d'accès enregistré car il s'agit de la couche du modèle. Comment puis-je résoudre ce problème afin que je puisse utiliser un jeton d'accès de la couche modèle sans utiliser de classe com.android?
vous attendez-vous le Jeton de changer lors de l'exécution? Sinon pourquoi ne pas simplement l'injecter dans le constructeur RestDataSource? – Joakim