2016-01-12 10 views
6

क्या कोई तरीका है जब मेरे रेट्रोफिट कॉल ने अपना कर्तव्य पूरा कर लिया है? मुझे पता है कि जब सभी डेटा प्राप्त होता है तो कोड आगे बढ़ सकता है, जैसे कि दूसरी गतिविधि शुरू करने या दूसरी कॉल करने के लिए पहले कॉल से डेटा का उपयोग करना?कैसे पता चलेगा कि रेट्रोफिट कॉल कब समाप्त हो गया है

Ps .: मैं एक एसिंक्रोनस अनुरोध (.enqueue) का उपयोग कर रहा हूं।

संपादित करें:

getContact(){ 
//Get a contact List from the server  
    Call<List<ModelContact>> callM = contactInterface.createRContact(listContact); 
    callM.enqueue(new Callback<List<ModelContact>>() { 
    @Override 

    public void onResponse(Response<List<ModelContact>> response, Retrofit retrofit) { 
     // Fetch the List from Response and save it on the local database 
     } 

    @Override 
     public void onFailure(Throwable t) { 
      Log.i("TAG", "Error: " + t.getMessage()); 
     } 
    }); 

    //Gets a object containing some configurations 
    Call<Configs> callC = contactInterface.getConfigs(Configs); 
    callC.enqueue(new Callback<Configs>() { 
    @Override 

    public void onResponse(Response<Configs> response, Retrofit retrofit) { 
     // Fetch the Configs object and save it on the database 
     } 

    @Override 
     public void onFailure(Throwable t) { 
      Log.i("TAG", "Error: " + t.getMessage()); 
     } 
    }); 

    //Here I need to start a new activity after the calls 
    Intent loginact = new Intent(TokenActivity.this, LoginActivity.class); 
      startActivity(loginact); 


} 
+0

आप enqueue को (उर्फ श्रोता) एक प्रतिनिधि प्रदान कर सकते हैं। – Blackbelt

+0

मुझे कोड नमूना कहां मिल सकता है, मैंने इसे गोगल किया है और कुछ भी नहीं मिला है ... – Rafael

+1

आप अपना प्रयास क्यों नहीं पोस्ट करते? – Blackbelt

उत्तर

3

शायद आप दो बूलियन झंडे का उपयोग करें और अपने getContact विधि के बाहर नए इरादे शुरू कर सकते हैं।

कुछ इस तरह:

public class MyActivity extends Activity { 
    //lot of code omitted 
    private boolean cIsFinished; 
    private boolean mIsFinished; 

    private void getContact(){ 
     //create M and C 
     m.onResponse(){ 
     //do whatever you want with data and call startIntent 
     mIsFinished=true; 
     startIntent(); 
     } 
     c.onResponse(){ 
     //do whatever you want with data and call startIntent 
     cIsFinished=true; 
     startIntent(); 
     } 


    } 
    private synchronized void startIntent(){ 
     if(cIsFinished && mIsFinished){ 
      //startIntentHere! 
      Intent intent = new blah blah blah 
     } 

    }  
} 
+0

जब कोड प्रारंभ INTent() तक पहुंचता है और प्रतिक्रियाएं अभी तक प्राप्त नहीं हुई हैं, तो यह वहां रुक गया है, मुझे इसे उत्तरदायी होने की आवश्यकता है, जैसे चर को सत्य पर सेट किया गया है, यह फिर से परीक्षण करता है ... इसे करने का कोई तरीका? – Rafael

1

ले जाएँ

//Gets a object containing some configurations 
Call<Configs> callC = contactInterface.getConfigs(Configs); 
callC.enqueue(new Callback<Configs>() { 

    @Override 
    public void onResponse(Response<Configs> response, Retrofit retrofit) { 
    // Fetch the Configs object and save it on the database 
     Intent loginact = new Intent(TokenActivity.this, LoginActivity.class); 
     startActivity(loginact); 
    } 

    @Override 
    public void onFailure(Throwable t) { 
     Log.i("TAG", "Error: " + t.getMessage()); 
    } 
}); 

callM के onResponse विधि इस तरह के अंदर। इस तरह firs callM निष्पादित होगा, जब भी यह callC समाप्त हो जाएगा, और जब भी callC समाप्त होता है तो यह इरादा फेंक देगा।

getContact(){ 
    //Get a contact List from the server  
    Call<List<ModelContact>> callM = contactInterface.createRContact(listContact); 
    callM.enqueue(new Callback<List<ModelContact>>() { 

    @Override  
    public void onResponse(Response<List<ModelContact>> response, Retrofit retrofit) { 
     // Fetch the List from Response and save it on the local database 
      //Gets a object containing some configurations 
      Call<Configs> callC = contactInterface.getConfigs(Configs); 
      callC.enqueue(new Callback<Configs>() { 
       @Override 
       public void onResponse(Response<Configs> response, Retrofit retrofit) { 
        //Fetch the Configs object and save it on the database 
        //Here I need to start a new activity after the calls 
        Intent loginact = new Intent(TokenActivity.this, LoginActivity.class); 
        startActivity(loginact); 
       } 

       @Override 
       public void onFailure(Throwable t) { 
        Log.i("TAG", "Error: " + t.getMessage()); 
       } 
      }); 
     } 

     @Override 
     public void onFailure(Throwable t) { 
      Log.i("TAG", "Error: " + t.getMessage()); 
     } 
    });  
    } 
+0

मैं थोड़ी देर में कॉलबैक नरक में नहीं पहुंचने की कोशिश कर रहा हूं, क्योंकि बाद में मुझे गोना 8 अलग-अलग चीजों का उपयोग करना है एंट कॉल, और एक दूसरे के अंदर एक सेटिंग को थोड़े गड़बड़ हो जाएगा ... मुझे लगता है कि – Rafael

0

यदि आपके पास कोई अनुरोध एक-दूसरे पर निर्भर है, तो यह जटिल होगा। आप कई अनुरोधों को श्रृंखलाबद्ध करने और कॉलबैक नरक से बचने के लिए flatMap विधि का उपयोग कर RxJava के साथ ऐसा कर सकते हैं। यह बहुत आसान है। आप इसे यहां सीख सकते हैं।

http://joluet.github.io/blog/2014/07/07/rxjava-retrofit/

+1

संदर्भ लिंक टूटा हुआ है – JUL2791

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

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