Dal*_*ian 11 java android retrofit retrofit2 okhttp3
我正在使用Retrofit2,我想重写其Call.enqueue方法.
到目前为止我这样做了:
定制电话:
public class CustomCall<T> implements Call<T> {
private final Call<T> delegate;
//..every method has delegate method invoked in it
Run Code Online (Sandbox Code Playgroud)
蜜蜂:
@GET
CustomCall<TKBaseResponse> testConnection(@Url String customUrl);
Run Code Online (Sandbox Code Playgroud)
但我不断收到这些错误:
Unable to create call adapter for CustomCall<....>
Run Code Online (Sandbox Code Playgroud)
和
Could not locate call adapter for CustomCall<....>
Run Code Online (Sandbox Code Playgroud)
我怎么能正确地做到这一点?提前致谢!
首先创建一个ServiceManager类 -
public final class ServiceManager {
private static ServiceManager sServiceManager;
/**
* Gets the instance of the web services implementation.
*
* @return the singleton instance.
*/
public static ServiceManager get() {
if (sServiceManager == null) {
sServiceManager = new ServiceManager();
}
return sServiceManager;
}
/**
* Creates the services for a given HTTP Url, useful when testing
* through multiple endpoints and unit testing
*
* @param clazz the service class.
* @param <T> type of the service.
* @return the created services implementation.
*/
public <T> T createService(Class<T> clazz) {
return createService(clazz, HttpUrl.parse(ServiceApiEndpoints.SERVICE_ENDPOINT));
}
/**
* Creates the services for a given HTTP Url, useful when testing
* through multiple endpoints and unit testing
*
* @param clazz the service class.
* @param httpUrl the endpoint
* @param <T> type of the service.
* @return the created services implementation.
*/
public <T> T createService(Class<T> clazz, HttpUrl httpUrl) {
Retrofit retrofit = getRetrofit(httpUrl);
return retrofit.create(clazz);
}
public <T> T createService(Class<T> clazz, Retrofit retrofit) {
return retrofit.create(clazz);
}
private Retrofit getRetrofit(HttpUrl httpUrl) {
return new Retrofit.Builder()
.baseUrl(httpUrl)
.client(createClient())
.addConverterFactory(getConverter())
.build();
}
public Retrofit getPlainRetrofit(HttpUrl httpUrl) {
return new Retrofit.Builder()
.baseUrl(httpUrl)
.client(new OkHttpClient.Builder().build())
.addConverterFactory(getConverter())
.build();
}
private Converter.Factory getConverter() {
return GsonConverterFactory.create();
}
private OkHttpClient createClient() {
return new OkHttpClient.Builder().addInterceptor(new RequestInterceptor()).build();
}
}
Run Code Online (Sandbox Code Playgroud)
ServiceApiEndpoints是一个包含服务端点的类.
final class ServiceApiEndpoints {
public static final String SERVICE_ENDPOINT = "your_app_url";
}
Run Code Online (Sandbox Code Playgroud)
创建一个APIService接口
public interface APIService {
String GET_INFO = "get_info";
@GET(GET_INFO)
Call<ResInfo[]> getInfo();
}
Run Code Online (Sandbox Code Playgroud)
创建ResInfo模型.
public class ResInfo {
private static final String FIELD_CONTENT = "content";
public String getContent() {
return mContent;
}
public void setContent(final String content) {
mContent = content;
}
@SerializedName(FIELD_CONTENT)
private String mContent;
public ResInfo(){
}
}
Run Code Online (Sandbox Code Playgroud)
致电请求.
private Call<ResInfo[]> mGetInfoAPICall;
APIService apiService=ServiceManager.get().createService(APIService.class);
mGetInfoAPICall = apiService.getInfo();
mGetInfoAPICall.enqueue(new Callback<ResInfo[]>() {
@Override
public void onResponse(Call<ResInfo[]> call, Response<ResInfo[]> response) {
}
@Override
public void onFailure(Call<ResInfo[]> call, Throwable t) {
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |