8

Retrofit コールがいつ義務を終了したかを知る方法はありますか? 別のアクティビティを開始したり、最初の呼び出しからのデータを使用して 2 番目の呼び出しを行うなど、コードを続行できるように、すべてのデータがいつ受信されるかを知りたいですか?

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);


}
4

4 に答える 4

5

おそらく、2 つのブール値フラグを使用して、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
       }

    }    
}
于 2016-01-12T20:37:45.460 に答える
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());
    }
});

insidecallMonResponseメソッドはこのように。そうすれば、最初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());
        }
    });    
  }
于 2016-01-12T20:40:45.653 に答える
0

相互に依存する要求があると、複雑になります。flatMap メソッドを使用して複数のリクエストをチェーンし、コールバック地獄を回避することで、RxJava でそれを行うことができます。それはとても簡単です。ここで学ぶことができます。

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

于 2016-06-10T08:06:29.973 に答える
0

レトロフィット コールの終了後に別のアクティビティまたは別のフラグメントで何らかのタスクを実行したいが、アクティビティが変更され、レトロフィット コールの終了をまだ待っている場合は、インターフェイスを使用してデータを送信できます。

レトロフィットを介して API を呼び出しているアクティビティ A があり、この呼び出しが実行されている間にユーザーが別のアクティビティ B に移動し、完了時にアクティビティ B でメソッドを呼び出す (または何か他のことを行う) 必要があるとします。 Aから電話。

A でインターフェイス AB を作成し、AB を実装してアクティビティ B でそのメソッドをオーバーライドし、API 呼び出しの onResponse() メソッド内のアクティビティ A でインターフェイス AB のオブジェクトを介してメソッドを呼び出します。

于 2021-10-04T15:21:21.627 に答える