2017-06-17 6 views
1

新しいアクティビティを使用してFirebase認証アクティビティを起動し、認証されたユーザをNodeJS APIに投稿しますが、認証されていなくてもFirebase認証アクティビティは起動しません。私は多くの場所からFirebase認証活動を立ち上げた以前のFirebase認証のログインアクティビティが新しいアクティビティから起動しない



    public class loginActivity extends AppCompatActivity { 
     FirebaseAuth auth; 
     private static final int RC_SIGN_IN=1; 
     double latitude,longitude; 
     boolean isAuthDone=false; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_login); 
      auth=FirebaseAuth.getInstance(); 
      if(auth.getCurrentUser() != null){ 
       //user already logged in 
       Log.d("TAG  ", auth.getCurrentUser().getEmail()+" already logged in."); 
       onBackPressed(); 
      } 
      else { 

        loginFunction(); 

      } 

      String name=auth.getCurrentUser().getDisplayName(); //LINE 54 
      String email=auth.getCurrentUser().getEmail(); 

      // POST TO API 
      GPSTracker tracker = new GPSTracker(this); 
      if (!tracker.canGetLocation()) { 
       tracker.showSettingsAlert(); 
      } else { 
       latitude = tracker.getLatitude(); 
       longitude = tracker.getLongitude(); //LOCATION 
      } 


      String loc = latitude+", "+longitude; 
      Users newUser=new Users(name, email, loc, "0", false); 

    //  if(!isAuthDone){ 
    //   while(!isAuthDone){ 
    //    loginFunction(); //ASK FOR LOGIN UNTIL THE USER AUTHENTICATES. 
    //   } 
    //  } 

      Retrofit retrofit = new Retrofit.Builder() 
        .baseUrl(ApiUrls.BASEURL) 
        .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().serializeNulls().create())) 
        .build(); 
      ApiInterface apiI; 
      apiI= retrofit.create(ApiInterface.class); 
      Call call; 
      call=apiI.saveUser(newUser); 
      call.enqueue(new Callback() { 
       @Override 
       public void onResponse(Call call, Response response) { 
        if(response.isSuccessful()){ 
         Log.e("User reg. in API",response.message()+response.code()); 
         Users user=response.body(); 
         ApiUrls.userName=auth.getCurrentUser().getDisplayName(); 
         ApiUrls.userID=user.getID()+"";  //THIS IS VERY IMPORTANT. 
         ApiUrls.userEmail=user.getEmail(); 
         ApiUrls.profilePicURL=auth.getCurrentUser().getPhotoUrl(); 
         ApiUrls.isUserLoggedInAndSaved=true; 
        } 
       } 
       @Override 
       public void onFailure(Call call, Throwable t) { 
        Log.e("TAG", "Not posted in API"); 
        AuthUI.getInstance() 
          .signOut(loginActivity.this) 
          .addOnCompleteListener(new OnCompleteListener() { 
           @Override 
           public void onComplete(Task task) { 
            Log.d("TAG ", "Signed out from this app."); 
            onBackPressed(); 
           } 
          }); 
        ApiUrls.isUserLoggedInAndSaved=false; 
        //Sign out from the email and launch a DIALOG to try again. 
       } 
      }); 
      onBackPressed(); 

     } 

     private void loginFunction() { 
       startActivityForResult(AuthUI.getInstance() 
         .createSignInIntentBuilder() 
         .setProviders(AuthUI.FACEBOOK_PROVIDER, 
           AuthUI.EMAIL_PROVIDER, 
           AuthUI.GOOGLE_PROVIDER).build(),RC_SIGN_IN); 

     } 

     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if(requestCode == RC_SIGN_IN){ 
       if(resultCode == RESULT_OK){ 
        Log.d("TAG logged in", auth.getCurrentUser().getEmail()); 
        isAuthDone=true; 
       } 
       else{ 
        Log.d("TAG ", "USER NOT AUTHENTICATED"); 
        //Launch a dialog to turn the internet ON and redirect to some other activity. 
       } 
      } 
     } 
    } 

:ここ

はコードです。そこでは機能しましたが、現在は機能していません。エラーがある:java.lang.NullPointerExceptionが:によって引き起こさ

でヌルオブジェクト参照 上の仮想メソッドを呼び出すための試み「java.lang.Stringでcom.google.firebase.auth.FirebaseUser.getDisplayName()」 com.example.aavgeensingh.shuddhi.Activities.loginActivity.onCreate(loginActivity.java:54)

編集:私は今、原因を知っています。しかし、ユーザーが最初に認証して、APIを使用して詳細を投稿するのを待つことができる方法はありますか?

答えて

2

loginFunction()を呼び出した後、残りのonCreate()関数は引き続き実行されるため、ユーザーはnullになります。この時点までに実行を終了する必要があります。

+0

それは正しいですが、それ以降は何もしないと、私はAPIに必要なものを投稿できますか? –

+0

私は認証を待つことができ、それから私のAPIにretrofitを使って投稿する方法はありますか? –

関連する問題