2016-01-15 10 views
6

मैं अपने सर्वर REST API जो समस्याओं के बिना कुछ दिन पहले जब हर एक फोन अब एक अपवाद फेंकता है जब तक काम कर रहा है, उदाहरण फोन करने के लिए RoboSpice-रेट्रोफिट का उपयोग फेंकने:RoboSpice okhttp अपवाद

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' 

मैं अपवाद कुछ संकलक के साथ कुछ गड़बड़ है के आधार पर संदेह है, लेकिन मैं सिर्फ एक ताजा के साथ एक और कंप्यूटर पर परीक्षण एक ही समस्या अभी भी एक ही परियोजना पर जावा और Android स्टूडियो की स्थापना लेकिन ...

यह त्रुटि मुझे पागल कर रही है ...

कोई भी मदद के लिए कुछ भी जानता है? किसी भी सहायताको बहुत सराहा जाएगा।

संपादित

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

कृपया, जब आप robospice को कॉन्फ़िगर कर रहे हों, तो अपना कोड पोस्ट करें। – Alexander

+0

मैंने अपना कोड जोड़ा है, सोचा, मैंने वास्तव में कुछ भी नहीं बदला है, त्रुटियां अभी कहीं से नहीं आई हैं। – Arbitur

+0

कृपया मुझे बताएं, 'testActivity.java' – Alexander

उत्तर

5

क्योंकि HttpURLConnectionImplHttpEngine कि निर्धारित नहीं है पर एक निर्माता को लागू करने की कोशिश कर रहा है NoSuchMethodError हो रहा है। अब अपनी परियोजना पर निर्भर करता है:

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 

versio के रूप में एन 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 के एक अलग संस्करण से संभवतः एक पारस्परिक निर्भरता द्वारा खींचा जा रहा है।आप नीचे दिए गए निर्भरता को निर्दिष्ट करके समस्या को ठीक करने में सक्षम होना चाहिए: okhttp और okhttp-urlconnection के अपने संस्करणों को समन्वयित किया पाने के लिए

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

कि यदि किसी भी कारण से काम नहीं करता है, आपकी समस्या का हल अभी भी हो जाएगा और एक संस्करण पर जो retrofit के आपके संस्करण के साथ संगत है। ऊपर की तरह निर्भरता घोषित करें, HttpURLConnectionImpl और HttpEngine, figure out how they're getting pulled in to your build युक्त जार ढूंढें, और समस्याग्रस्त ट्रांजिटिव निर्भरताओं से छुटकारा पाने के लिए exclusions का उपयोग करें।

+0

बड़ा धन्यवाद! वास्तव में अच्छी तरह से लिखित उत्तर और यह काम किया और अच्छा शोध! – Arbitur

+0

बस इतना अजीब है कि मुझे इन्हें मैन्युअल रूप से जोड़ने की आवश्यकता है क्योंकि यह सिर्फ एक हफ्ते पहले काम करता था और मैंने अपनी ग्रेडल फ़ाइल नहीं बदली है: एस – Arbitur

+0

खुशी है कि मैं मदद कर सकता हूं। भले ही आपने अपना निर्माण नहीं बदला है, फिर भी इस तरह की चीज तब भी हो सकती है जब आपकी निर्भरता में से कोई एक अपनी pom.xml बदलता है, या यदि निर्भरता के पास संस्करण सीमा है और एक नया लागू संस्करण जारी किया गया है। – heenenee

संबंधित मुद्दे