Android改造:缺少方法体,或声明抽象
Android Retrofit: missing method body, or declare abstract
我正在编写一个 android 应用程序,它将使用 Retrofit 发出 API 请求。
我有一个这样的帮手class:
public class ApiService {
public static final String TAG = ApiService.class.getSimpleName();
public static final String BASE_URL = "https://myapiurl.com";
public static void testApi(){
ApiEndpointInterface apiService = prepareService();
apiService.ping(new Callback<Response>() {
@Override
public void success(Response apiResponse, retrofit.client.Response response) {
Log.e(TAG, apiResponse.toString());
}
@Override
public void failure(RetrofitError error) {
Log.e("Retrofit:", error.toString());
}
});
}
private static ApiEndpointInterface prepareService() {
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(BASE_URL)
.build();
ApiEndpointInterface apiService =
restAdapter.create(ApiEndpointInterface.class);
restAdapter.setLogLevel(RestAdapter.LogLevel.FULL);
return apiService;
}
}
而我实际的 Retrofit 实现很简单:
public class ApiEndpointInterface {
@GET("/v1/myendpoint")
void ping(Callback<Response> cb);
}
问题是,我无法构建项目,出现错误:
Error:(12, 10) error: missing method body, or declare abstract
参考我的 ApiEndpointInterface class。
知道发生了什么事吗?
尝试 public interface
作为您的 API 声明。
public interface ApiEndpointInterface {
@GET("/v1/myendpoint")
void ping(Callback<Response> cb);
}
此外,您似乎在告诉构建器将日志级别设置为完整之前创建 ApiEndpointInterface。
private static ApiEndpointInterface prepareService() {
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(BASE_URL)
.setLogLevel(RestAdapter.LogLevel.FULL);
.build();
ApiEndpointInterface apiService =
restAdapter.create(ApiEndpointInterface.class);
return apiService;
}
如果您更新到 okHttp 版本 2.4.0,您将得到空主体的异常,因为最新版本不再允许零长度请求,在这种情况下您将不得不使用以下语法
public 接口 ApiEndpointInterface {
@GET("/v1/myendpoint")
void ping(Callback<Response> cb, @Body String dummy);
}
致电
ApiEndpointInterface apiService =
restAdapter.create(ApiEndpointInterface.class);
apiService.ping(callback,"");
我正在编写一个 android 应用程序,它将使用 Retrofit 发出 API 请求。
我有一个这样的帮手class:
public class ApiService {
public static final String TAG = ApiService.class.getSimpleName();
public static final String BASE_URL = "https://myapiurl.com";
public static void testApi(){
ApiEndpointInterface apiService = prepareService();
apiService.ping(new Callback<Response>() {
@Override
public void success(Response apiResponse, retrofit.client.Response response) {
Log.e(TAG, apiResponse.toString());
}
@Override
public void failure(RetrofitError error) {
Log.e("Retrofit:", error.toString());
}
});
}
private static ApiEndpointInterface prepareService() {
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(BASE_URL)
.build();
ApiEndpointInterface apiService =
restAdapter.create(ApiEndpointInterface.class);
restAdapter.setLogLevel(RestAdapter.LogLevel.FULL);
return apiService;
}
}
而我实际的 Retrofit 实现很简单:
public class ApiEndpointInterface {
@GET("/v1/myendpoint")
void ping(Callback<Response> cb);
}
问题是,我无法构建项目,出现错误:
Error:(12, 10) error: missing method body, or declare abstract
参考我的 ApiEndpointInterface class。
知道发生了什么事吗?
尝试 public interface
作为您的 API 声明。
public interface ApiEndpointInterface {
@GET("/v1/myendpoint")
void ping(Callback<Response> cb);
}
此外,您似乎在告诉构建器将日志级别设置为完整之前创建 ApiEndpointInterface。
private static ApiEndpointInterface prepareService() {
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(BASE_URL)
.setLogLevel(RestAdapter.LogLevel.FULL);
.build();
ApiEndpointInterface apiService =
restAdapter.create(ApiEndpointInterface.class);
return apiService;
}
如果您更新到 okHttp 版本 2.4.0,您将得到空主体的异常,因为最新版本不再允许零长度请求,在这种情况下您将不得不使用以下语法
public 接口 ApiEndpointInterface {
@GET("/v1/myendpoint")
void ping(Callback<Response> cb, @Body String dummy);
}
致电
ApiEndpointInterface apiService =
restAdapter.create(ApiEndpointInterface.class);
apiService.ping(callback,"");