我们正在使用 Retrofit 构建一个应用程序,其中我们有一个单独的模块来连接我们的后端。按照目前的设计方式,在模块中,我们有一个 RestClient 类,其中包含用路由定义的其余适配器和接口。为简单起见,我提供了一个示例休息端点。
// Rest adapter instance
private static RestAdapter getRestAdapter() {
if (!isDebuggable) {
URL = URL_PROD;
} else {
URL = URL_UAT;
}
if (mRestAdapter != null) {
return mRestAdapter;
}
return mRestAdapter = new RestAdapter.Builder()
.setEndpoint(URL)
.setRequestInterceptor(authHeader())
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
}
private interface IApiClient {
@POST("/register")
void register(@Body JsonObject dataObject, Callback<SignInResponse> signInResponseCallback);
}
Run Code Online (Sandbox Code Playgroud)
对应的客户端定义如下:
public static void register(JsonObject jsonObject, final ErrorNetworkResponse<SignInResponse> listener) {
getRestAdapter().create(IApiClient.class).register(jsonObject, new Callback<SignInResponse>() {
@Override
public void success(SignInResponse signInResponse, Response response) {
if (listener != null) {
listener.onSuccess(signInResponse);
}
}
@Override
public void failure(RetrofitError error) {
Log.e("RegisterAPI", error.toString());
if (listener != null) {
listener.onError(error);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
现在我知道这种模式不是最优的,因为 1. 我们必须发出大量的休息 api 请求,因此为每个实例重复这么多代码是不可取的。2. 由于我们直接从 Activity 调用客户端,因此可能容易出现 Android 旋转视图问题。我正在寻找的是使用 Otto / EventBus 作为总线系统来提供 api 调用。但即便如此,如何为单个异步请求减少如此多的样板代码?最佳做法是什么?提前致谢!
| 归档时间: |
|
| 查看次数: |
2479 次 |
| 最近记录: |