質問: FirebaseFirestore.getInstance(); db.collection("users").document("score").get().addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(DocumentSnapshot documentSnapshot) { //スコアを取得 } }); return 「ここにスコア」; } ```
回答: CountDownLatch等を使って待ち合わせを行うようにすればscoreを戻り値として結果を返すこともできなくはないですが、ANRを起こすコードになりうるのでオススメしません。 適当にコールバックのinterfaceを定義して、データ取得完了時に呼び出してscoreを渡すように実装するのが良いと思います。 ``` interface ScoreCallback { void onGetScore(int score); } public static void getScore(Context context, ScoreCallback callback) { FirebaseFirestore.getInstance() .collection("users") .document("score") .get() .addOnSuccessListener(snapshot -> { // スコアの取得 int score = ...; callback.onGetScore(score); }); } ``` * 利用する側の例 ``` getScore(context, score -> { // 任意の処理... }); ```