NoSuchMethodError如果我使用的是okhttp 2.0和最新的改造?

时间:2014-05-27 15:16:51

标签: android gradle retrofit okhttp

无法找到方法com.squareup.okhttp.OkHttpClient.open,从方法retrofit.client.OkClient.openConnection引用。

下面是我的gradle配置

compile 'com.squareup.okhttp:okhttp:+'
compile 'com.squareup.okhttp:okhttp-urlconnection:+'
compile 'com.squareup.retrofit:retrofit:+'

3 个答案:

答案 0 :(得分:14)

好吧,square已经在github上发布了2.0 RC2,但是没有在maven上发布:

https://github.com/square/okhttp

但是你仍然需要okhttp-urlconnection(现在是RC1),这只是在maven上:

http://mvnrepository.com/artifact/com.squareup.okhttp

不要忘记okhttp 2.0现在依赖于okio:

https://github.com/square/okio

答案 1 :(得分:9)

杰克沃顿在谷歌+的答案​​我们可以这样做。我在改造时扔掉了OkClient。

public class RetrofitHttpClient extends UrlConnectionClient {

    private static final int CONNECT_TIMEOUT_MILLIS = 60 * 1000; // 30s
    private static final int READ_TIMEOUT_MILLIS = 85 * 1000; // 45s

    private static OkUrlFactory generateDefaultOkUrlFactory() {
        OkHttpClient client = new com.squareup.okhttp.OkHttpClient();
        client.setConnectTimeout(CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
        client.setReadTimeout(READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
        return new OkUrlFactory(client);
    }

    private final OkUrlFactory factory;

    public RetrofitHttpClient() {
        factory = generateDefaultOkUrlFactory();
    }

    @Override protected HttpURLConnection openConnection(Request request) throws IOException {
        return factory.open(new URL(request.getUrl()));
    }
}

我已经测试了这段代码。它的工作正常。

答案 2 :(得分:0)

添加

compile 'com.squareup.okhttp:okhttp-urlconnection:1.6.0'

compile 'com.squareup.retrofit:retrofit:+'

到我的gradle帮助我清除异常,但仍然无法使用https加载图像。

经过一些跟踪和错误的方法后,我从我的gradle中删除了

compile 'com.squareup.okhttp:okhttp:+'

然后我试过它对我有用。