gpt4 book ai didi

android - Android 的模型层如何使用 SharedPreferences 和 Context?

转载 作者:行者123 更新时间:2023-11-29 01:13:10 26 4
gpt4 key购买 nike

我使用的是整洁的架构,模型层有一个存储库、一个改造接口(interface)和一个实现存储库并创建改造服务的类。我正在使用这个例子:https://github.com/saulmm/Avengers

这里是类:改造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
);
}

存储库

public interface WyatRepository {




Observable<List<Event>> getEvents();


Observable<Event> getEvent(int id);


Observable<Event> postEvent(Venue venue, String path, Map map);
}

和其余数据源类:

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);
}

我的问题是在最后一节课中,我在构造函数中使用了 SharedPrefences,但出现错误,因为我无法使用 android 上下文或 SharedPreferences 来获取保存的访问 token ,因为它是模型层。如何解决此问题,以便我可以在不使用任何 com.android 类的情况下使用模型层的访问 token ?

最佳答案

更好的方法是像这样动态地设置您的Authorization:

 @GET("api/event/{id}")
Observable<Event> getEvent(@Header("Authorization") String authHeader,
@Path("id") int id);

或者在你的方法中你可以传递上下文:

public RestDataSource(Context context) {
// now you can access your shared preferences
}

关于android - Android 的模型层如何使用 SharedPreferences 和 Context?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41613657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com