2017-05-11 8 views
0

でのベストプラクティスを呼び出します。例1は非常に厄介で、メンバーboolとは醜いですが、動作します。複数の非同期は、私は特定のアクティビティ/フラグメントを開始する前に、だから、複数の非同期呼び出しが終了する必要があり、例1のための短い&クリーナーソリューションを必要とAndroidの

私はGoogle Tasks APIの使用を検討していました。しかし、私はgoogle-services.jsonを追加し、 "Google Sign-in"、 "Analytics"、または "Cloud messaging"のいずれかに接続する必要があります。より良い方法がなければなりませんか、これは正しい方法ですか?

例1:タスクAPIで

boolean mIsFirstDone = false; 
boolean mIsSecondDone = false; 
boolean mAlreadyDone = false; 

private void prepareSomeData() { 
    dataManager.requestSomeContent(new ApiCallback() { 
     @Override 
     public void onSuccess(final Object object) { 
      mIsFirstDone = true; 

      if(mIsFirstDone && mIsSecondDone && !mAlreadyDone) { 
       mAlreadyDone = true; 
       doSomething(); 
      } 
     } 
    }); 
} 

private void prepareSomeSettings() { 
    dataManager.requestSomeSettings(new ApiCallback() { 
     @Override 
     public void onSuccess(final Object object) { 
      mIsSecondDone = true; 

      if(mIsFirstDone && mIsSecondDone && !mAlreadyDone) { 
       mAlreadyDone = true; 
       doSomething(); 
      } 
     } 
    }); 
} 

Tasks.whenAll(SomeDataTask, SomeSettingsTask).addOnSuccessListener(executor, new OnSuccessListener<Void>() { 
     @Override 
     public void onSuccess(Void v) { 
      doSomething(); 
     } 
    }).addOnFailureListener(executor, new OnFailureListener() { 
     @Override 
     public void onFailure(@NonNull Exception e) { 
     } 
    }); 

答えて

1

RxJava、指摘したように、おそらくこれまでより優れたソリューションです。あなたは、エレガントでクリーンなコードのコンクリートブロックへのデータベース要求、複数のAPI要求をチェーンすることができますので、理由が理由です。たとえば、私が言っていることを以下に見てください:

Subscription subscription = apiService.getUser(someId) 
    .flatMap(user -> apiService.getFavourites(user.getFavouritesTag()) 
    .subscribe(favourites -> view.updateFavouritesList(favourites), 
     throwable -> Log.e(TAG, throwable.printStackTrace()); 
1

はあなたがRxJavaについての学習やAPIのための改造とともにRxJavaにすべてのプロジェクトを再フォーマットすると考えたことがありますか?このようなもので

開始:

https://medium.com/yammer-engineering/chaining-multiple-sources-with-rxjava-20eb6850e5d9

https://adityaladwa.wordpress.com/2016/05/11/dagger-2-and-mvp-architecture/

+0

Thnx!私は週末にこれを調べます。私は恐らくRxJavaを理解するのに時間がかかるでしょう:)。 –

+0

は最終的に、あなたがそれを好きかどうか、それに移行します:Dあなたはあなたの質問への回答によって、既にそれを見ることができます;)私はあなたが他の許容可能な答えが、rxjavaを推薦持つものを買ってあげることはよく分かりません。 – tompadre

+0

私は、少し待っていますが、私はそれが特にAndroid向けGoogleがあるので、驚いタスクAPIが良いオプションではありませんよ。 –

関連する問題