gpt4 book ai didi

java - RoboSpice 抛出 okhttp 异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:58:33 27 4
gpt4 key购买 nike

我使用 RoboSpice-Retrofit 调用我的服务器 REST api,直到几天前它一直没有问题,现在每次调用都会抛出异常,示例:

D/Retrofit: java.lang.NoSuchMethodError: No direct method <init>(Lcom/squareup/okhttp/OkHttpClient;Lcom/squareup/okhttp/Request;ZZZLcom/squareup/okhttp/Connection;Lcom/squareup/okhttp/internal/http/RouteSelector;Lcom/squareup/okhttp/internal/http/RetryableSink;Lcom/squareup/okhttp/Response;)V in class Lcom/squareup/okhttp/internal/http/HttpEngine; or its super classes (declaration of 'com.squareup.okhttp.internal.http.HttpEngine' appears in /data/app/com.company.app.customerapp-1/base.apk)
at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.newHttpEngine(HttpURLConnectionImpl.java:362)
at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.initHttpEngine(HttpURLConnectionImpl.java:312)
at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:377)
at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:497)
at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73)
at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38)
at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321)
at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240)
at java.lang.reflect.Proxy.invoke(Proxy.java:393)
at $Proxy0.getTest(Unknown Source)
at com.adoperator.tidyapp.TestActivity$TestRequest.loadDataFromNetwork(TestActivity.java:67)
at com.adoperator.tidyapp.TestActivity$TestRequest.loadDataFromNetwork(TestActivity.java:54)
at com.octo.android.robospice.request.CachedSpiceRequest.loadDataFromNetwork(CachedSpiceRequest.java:48)
at com.octo.android.robospice.request.DefaultRequestRunner.processRequest(DefaultRequestRunner.java:150)
at com.octo.android.robospice.request.DefaultRequestRunner$1.run(DefaultRequestRunner.java:217)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
D/Retrofit: ---- END ERROR

依赖关系:

compile 'com.octo.android.robospice:robospice:1.4.14'
compile 'com.octo.android.robospice:robospice-cache:1.4.14'
compile 'com.octo.android.robospice:robospice-retrofit:1.4.14'

我怀疑基于异常是编译器有问题,但我只是在另一台计算机上测试,在同一个项目上全新安装了 Java 和 Android Studio,但同样的问题仍然存在......

这个错误快把我逼疯了...

有谁知道有什么可以帮助的吗?非常感谢任何帮助。

编辑

MainActivity.java:

SpiceManager spiceManager = new SpiceManager(TestAPIService.class);

protected void onStart() {
super.onStart();

spiceManager.start(this);

spiceManager.execute(new TestRequest(), new RequestListener<ResponseData>() {
...
});
}

TestAPIService.java:

public class TestAPIService extends RetrofitGsonSpiceService {

@Override
public void onCreate() {
super.onCreate();
addRetrofitInterface(TestAPI.class);
}

@Override
protected String getServerUrl() {
return "http://192.168.0.2";
}
}

TestAPI.java:

public interface TestAPI {
@GET("/test")
ResponseData getTest();
}

TestRequest.java:

public class TestRequest extends RetrofitSpiceRequest<ResponseData, TestAPI> {

public TestRequest() {
super(ResponseData.class, TestAPI.class);
}


@Override
public ResponseData loadDataFromNetwork() throws Exception {
ResponseData response;

try {
response = getService().getTest();
}
catch (Exception e) {
e.printStackTrace();
throw e;
}

return response;
}
}

最佳答案

NoSuchMethodError 的发生是因为 HttpURLConnectionImpl 试图在 HttpEngine 上调用未定义的构造函数。现在您的项目取决于:

com.octo.android.robospice:robospice-retrofit:1.4.14

哪个depends on :

com.squareup.retrofit:retrofit:1.6.1

哪个depends on两者:

com.squareup.okhttp:okhttp:2.0.0

and

com.squareup.okhttp:okhttp-urlconnection:2.0.0

从版本 2.0.0 开始,HttpURLConnectionImplokhttp-urlconnection 模块中,而 HttpEngineokhttp 模块。堆栈跟踪的 retrofit.client.UrlConnectionClient 部分正确匹配 retrofit:1.6.1 ,但 com.squareup.okhttp.internal.huc.HttpURLConnectionImpl 部分与 okhttp-urlconnection:2.0.0 不匹配;它匹配 okhttp-urlconnection:2.4.0 . NoSuchMethodError 提示的构造函数确实在 okhttp:2.4.0 中定义,所以这意味着您的类路径上有一个不同的 HttpEngine,很可能来自不同版本的 okhttp,它被传递依赖性引入。您应该能够通过指定以下依赖项来解决问题:

compile('com.squareup.okhttp:okhttp:2.0.0') {
force = true
}
compile('com.squareup.okhttp:okhttp-urlconnection:2.0.0') {
force = true
}

如果出于某种原因这不起作用,您的问题的解决方案仍然是让您的 okhttpokhttp-urlconnection 版本同步与您的 retrofit 版本兼容的版本。与上面类似声明依赖项,找到包含 HttpURLConnectionImplHttpEngine 的 jar,figure out how they're getting pulled in to your build ,并使用 exclusions摆脱有问题的传递依赖。

关于java - RoboSpice 抛出 okhttp 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34809462/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com