【发布时间】:2018-08-30 12:10:24
【问题描述】:
我在我的项目中使用改造,我想知道是否有办法在不同的类上分离对 api 的调用,例如: 仅登录活动 /api/users/login 仅限电影活动 /api/movies/all 我都在同一个界面上,我发现这不是一个好方法......你能指导我如何让它更干净吗?我正在使用 MVP 架构来做到这一点。
这是我的NetworkService.class
public class NetworkService {
private NetworkAPI networkAPI;
private OkHttpClient okHttpClient;
private LruCache<Class<?>, Observable<?>> apiObservables;
public NetworkService() {
this(BASE_URL);
}
public NetworkService(String baseUrl) {
okHttpClient = buildClient();
apiObservables = new LruCache<>(10);
Gson gson = new GsonBuilder()
.setLenient()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.create();
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
// set your desired log level
//logging.setLevel(Level.BASIC);
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
Builder httpClient = new Builder()
.connectTimeout(100, TimeUnit.SECONDS)
.readTimeout(100, TimeUnit.SECONDS);
httpClient.addInterceptor(logging);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(httpClient.build())
.build();
networkAPI = retrofit.create(NetworkAPI.class);
}
/**
* Method to return the API interface.
*
* @return
*/
public NetworkAPI getAPI() {
return networkAPI;
}
/**
* Method to build and return an OkHttpClient so we can set/get
* headers quickly and efficiently.
*
* @return
*/
public OkHttpClient buildClient() {
Builder builder = new Builder();
builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
// Do anything with response here
//if we want to grab a specific cookie or something..
return response;
}
});
builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
//this is where we will add whatever we want to our request headers.
Request request = chain.request().newBuilder().addHeader("Accept", "application/json").build();
return chain.proceed(request);
}
});
return builder.build();
}
/**
* Method to clear the entire cache of observables
*/
public void clearCache() {
apiObservables.evictAll();
}
}
我的NetworkAPI.class 有这个
public interface NetworkAPI {
@POST(LOGIN)
Call<LoginResponse> login(@Body LoginRequest loginRequest);
//And more calls...
}
你们知道我能不能做得更干净吗?
【问题讨论】:
-
我真的建议你看看一些开源项目。 GitHub 上有数以千计的项目。祝你好运!
标签: java android retrofit2 android-mvp