2014-06-30 9 views
7

के साथ मॉकवेबसेवर और रेट्रोफिट मैं मॉकवेबसेवर द्वारा नेटवर्क संचार अनुकरण करना चाहता हूं। Unfortulatelly retrofit कॉलबैक कभी invoking नहीं कर रहे हैं। मेरा कोड:कॉलबैक

MockWebServer server = new MockWebServer(); 
    server.enqueue(new MockResponse().setResponseCode(200).setBody("{}")); 
    server.play(); 

    RestAdapter restAdapter = new RestAdapter.Builder().setConverter(new MyGsonConverter(new Gson())) 
      .setEndpoint(server.getUrl("/").toString()).build(); 

    restAdapter.create(SearchService.class).getCount(StringUtils.EMPTY, 
      new Callback<CountContainer>() { 

       @Override 
       public void success(CountContainer countContainer, Response response) { 
        System.out.println("success"); 
       } 

       @Override 
       public void failure(RetrofitError error) { 
        System.out.println("error"); 
       } 
      }); 

    server.shutdown(); 

जब मैं कॉलबैक के बिना रेट्रोफिट का उपयोग करता हूं तो यह काम करता है।

+0

क्या आपको अपना कॉलबैक संलग्न करने की आवश्यकता है * इससे पहले कि आप 'server.play() 'करें? – Blundell

+1

जब मैं ऑर्डर बदलता हूं, तो यह अपवाद java.lang.IllegalStateException फेंकता है: कॉल करने से पहले बंदरगाह को पुनर्प्राप्त नहीं कर सकता() – lukjar

उत्तर

12

Callback होने के बाद आप अनुरोध को आमंत्रित करने के लिए रेट्रोफिट को बता रहे हैं और कॉलबैक को असीमित रूप से कॉल कर रहे हैं। इसका मतलब है कि कुछ भी होने से पहले आपका परीक्षण निकल रहा है।

  • परीक्षण के अंत में एक लॉक का प्रयोग करें और जब तक प्रतीक्षा करें कॉलबैक तरीकों में से एक का आह्वान कर रहे हैं:

    वहाँ काम करने के लिए इसे पाने के लिए दो तरीके हैं।

  • RestAdapter.Builder पर setExecutors पर एक सिंक्रोनस Executor (जो केवल .run() तुरंत कॉल करता है) का उदाहरण पास करें ताकि पृष्ठभूमि आमंत्रण और कॉलबैक आमंत्रण सिंक्रनाइज़ हो जाएं।
+0

+1 धन्यवाद, सिंक्रोनस 'एक्जिक्यूटर्स' की आपूर्ति बहुत बढ़िया है। लॉक मुख्य धागे को अवरुद्ध नहीं करेगा और इसलिए कॉलबैक को निष्पादित करने की अनुमति नहीं है (मुख्य धागे पर) और इसलिए लॉक कभी जारी नहीं किया गया है? 'लॉक' द्वारा 'काउंटरडाउनलैच' – Dori

+0

जैसे कुछ की सोच में यह रेट्रोफिट 2 के साथ काम नहीं करता है। मैं इसे रेट्रोफिट 2 में कैसे काम कर सकता हूं? –