新しいアクティビティを使用して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を使用して詳細を投稿するのを待つことができる方法はありますか?
それは正しいですが、それ以降は何もしないと、私はAPIに必要なものを投稿できますか? –
私は認証を待つことができ、それから私のAPIにretrofitを使って投稿する方法はありますか? –