2017-07-12 24 views
0

私はTomcat 8(アンドロイドではない)、Java 8、Firebase Adminバージョン5.2.0のJava Webアプリケーションを持っています。 以下のコードは正常に動作しますが、タスクが完了し、値を返す必要があります。Javaでfirebaseタスクが完了しているかどうかを確認する方法は?

@POST 
    @Path("/verifyToken") 
    @Produces(MediaType.APPLICATION_JSON) 
public Response verifyToken(@Context HttpHeaders headers,@Context HttpServletRequest request) { 
     try { 
      String auth = headers.getRequestHeader("authorization").get(0); 

      if (!auth.isEmpty()) { 
       System.out.println("logged auth token: " + auth); 
      } 

      // validate token 
      Task<FirebaseToken> task = FirebaseAuth.getInstance().verifyIdToken(auth) 

      .addOnSuccessListener(new OnSuccessListener<FirebaseToken>() { 
       @Override 

       public void onSuccess(FirebaseToken decoded) { 
        String uid = decoded.getUid(); 
        //do some stuff 

       } 
     }); 
      /* 
      The return statement below shouldn't run unless "task" is 
      complete. 
       task has method isComplete() 
      */ 
      return Response.status(200).entity(user).build(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println("Login Exception " + e.getMessage()); 
      return Response.status(500).build(); 
     } 

    } 

タスクオブジェクト(タスク)のメソッドは "isComplete()"です。ただし、複数回呼び出す必要がある場合があります。最初にタスクが完了していない場合、コードは、後でまたこのようにして特定の回数まで待つ方法を知っている必要があります。

私は、タスクが完了するか、イベントが条件を終了するまで、適切に待機して再試行するロジックを構築する方法に悩まされています。

どうすればよいですか?

+1

あなたは 'Tasks.await()'を探しています。 Doug'dの優れたブログ記事はこちら:https://firebase.googleblog.com/2016/10/become-a-firebase-taskmaster-part-4.html –

+0

これはまさに私が探していたものです。ありがとう、フランク。 – blackjack

答えて

関連する問題