【问题标题】:Android Retrofit: missing method body, or declare abstractAndroid Retrofit:缺少方法体,或声明抽象
【发布时间】:2015-08-17 01:09:21
【问题描述】:

我正在编写一个 Android 应用程序,它将使用 Retrofit 来发出 API 请求。

我有一个这样的辅助类:

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

}

而我的实际改造实现很简单:

public class ApiEndpointInterface {

    @GET("/v1/myendpoint")
    void ping(Callback<Response> cb);
}

问题是,我无法构建项目,我得到了错误:

Error:(12, 10) error: missing method body, or declare abstract

参考我的 ApiEndpointInterface 类。

知道发生了什么吗?

【问题讨论】:

    标签: java android api retrofit


    【解决方案1】:

    尝试使用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;
    }
    

    【讨论】:

      【解决方案2】:

      如果您更新到 okHttp 版本 2.4.0,您将收到空 Body 异常,因为最新版本不再允许零长度请求,在这种情况下,您必须使用以下语法

      公共接口 ApiEndpointInterface {

      @GET("/v1/myendpoint")
      void ping(Callback<Response> cb, @Body String dummy);
      

      }

      打电话

       ApiEndpointInterface apiService =
                  restAdapter.create(ApiEndpointInterface.class);
      
       apiService.ping(callback,"");
      

      参考 https://github.com/square/okhttp/issues/751

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-24
        • 2022-11-02
        • 1970-01-01
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        • 2011-07-18
        • 2015-06-29
        相关资源
        最近更新 更多