java - Register Layout not showing first time
问题描述
Whenever i verify phone number with OTP then it should go to Register Layout but it returns to login layout. But when i close the app and run it again then it directly jumps to register layout.
I had check the code several times but not able to find the error.
here is the sample video: https://www.youtube.com/watch?v=elfg7bS3Cig
Here is my code
public class SplashScreenActivity extends AppCompatActivity {
private final static int LOGIN_REQUEST_CODE = 6262; //Any number you want
private List<AuthUI.IdpConfig> providers;
private FirebaseAuth firebaseAuth;
private FirebaseAuth.AuthStateListener listener;
private Uri filePath;
private ImageView img_drive_proof;
private final int PICK_IMAGE_REQUEST = 22;
@BindView(R.id.progress_bar)
ProgressBar progress_bar;
FirebaseDatabase database;
DatabaseReference driverInfoRef;
@Override
protected void onStart() {
super.onStart();
delaySplashScreen();
}
private void delaySplashScreen() {
progress_bar.setVisibility(View.VISIBLE);
Completable.timer(3, TimeUnit.SECONDS,
AndroidSchedulers.mainThread())
.subscribe(() ->
//After show Splash Screen, ask login if not login
firebaseAuth.addAuthStateListener(listener)
);
}
@Override
protected void onStop() {
if (firebaseAuth != null && listener != null)
firebaseAuth.addAuthStateListener(listener);
super.onStop();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
init();
}
private void init() {
ButterKnife.bind(this);
database = FirebaseDatabase.getInstance();
driverInfoRef = database.getReference(Common.DRIVER_INFO_REFERENCE);
providers = Arrays.asList(
new AuthUI.IdpConfig.PhoneBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build()
);
firebaseAuth = FirebaseAuth.getInstance();
listener = myFirebaseAuth -> {
FirebaseUser user = myFirebaseAuth.getCurrentUser();
if (user != null)
{
//Update Token
FirebaseInstanceId.getInstance()
.getInstanceId()
.addOnFailureListener(e -> Toast.makeText(SplashScreenActivity.this, "", Toast.LENGTH_SHORT).show())
.addOnSuccessListener(instanceIdResult -> {
Log.d("TOKEN",instanceIdResult.getToken());
UserUtils.updateToken(SplashScreenActivity.this, instanceIdResult.getToken());
});
checkUserFromFirebase();
}
else {
showLoginLayout();
}
};
}
private void showLoginLayout() {
AuthMethodPickerLayout authMethodPickerLayout = new AuthMethodPickerLayout
.Builder(R.layout.layout_sign_in)
.setPhoneButtonId(R.id.btn_phone_sign_in)
.setGoogleButtonId(R.id.btn_google_sign_in)
.build();
startActivityForResult(AuthUI.getInstance()
.createSignInIntentBuilder()
.setAuthMethodPickerLayout(authMethodPickerLayout)
.setIsSmartLockEnabled(false)
.setTheme(R.style.LoginTheme)
.setAvailableProviders(providers)
.build(),LOGIN_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == LOGIN_REQUEST_CODE)
{
IdpResponse response = IdpResponse.fromResultIntent(data);
if(resultCode == RESULT_OK)
{
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
}
else
{
Toast.makeText(this, response.getError().getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
private void checkUserFromFirebase() {
driverInfoRef.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
{
DriverInfoModel driverInfoModel = dataSnapshot.getValue(DriverInfoModel.class);
goToHomeActivity(driverInfoModel);
}
else
{
showRegisterLayout();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(SplashScreenActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
private void showRegisterLayout() {
AlertDialog.Builder builder = new AlertDialog.Builder(this,R.style.DialogTheme);
View itemView = LayoutInflater.from(this).inflate(R.layout.layout_register,null);
TextInputEditText edt_first_name = (TextInputEditText)itemView.findViewById(R.id.edt_first_name);
TextInputEditText edt_last_name = (TextInputEditText)itemView.findViewById(R.id.edt_last_name);
TextInputEditText edt_phone = (TextInputEditText)itemView.findViewById(R.id.edt_phone_number);
img_drive_proof = (ImageView)itemView.findViewById(R.id.img_drive_proof);
Button btnUpload = (Button) itemView.findViewById(R.id.btnUpload);
Button btn_continue = (Button)itemView.findViewById(R.id.btn_register);
img_drive_proof.setOnClickListener(v -> SelectImage());
btnUpload.setOnClickListener(v -> uploadImage());
//Set data
if (FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber() != null &&
!TextUtils.isEmpty(FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber()))
edt_phone.setText(FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber());
//Set View
builder.setView(itemView);
AlertDialog dialog = builder.create();
dialog.show();
btn_continue.setOnClickListener(v -> {
if (TextUtils.isEmpty(edt_first_name.getText().toString()))
{
Toast.makeText(this, "Please enter first name", Toast.LENGTH_SHORT).show();
return;
}
else if (TextUtils.isEmpty(edt_last_name.getText().toString()))
{
Toast.makeText(this, "Please enter last name", Toast.LENGTH_SHORT).show();
return;
}
else if (TextUtils.isEmpty(edt_phone.getText().toString()))
{
Toast.makeText(this, "Please enter phone number", Toast.LENGTH_SHORT).show();
return;
}
else
{
DriverInfoModel model = new DriverInfoModel();
model.setFirstName(edt_first_name.getText().toString());
model.setLastName(edt_last_name.getText().toString());
model.setPhoneNumber(edt_phone.getText().toString());
model.setRating(0.0);
driverInfoRef.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.setValue(model)
.addOnFailureListener(e ->
{
dialog.dismiss();
Toast.makeText(SplashScreenActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
)
.addOnSuccessListener(aVoid -> {
Toast.makeText(this, "Register Successfully ", Toast.LENGTH_SHORT).show();
dialog.dismiss();
goToHomeActivity(model);
});
}
});
}
private void goToHomeActivity(DriverInfoModel driverInfoModel) {
Common.currentUser = driverInfoModel;
startActivity(new Intent(this,DriverHomeActivity.class));
finish();
}
}
解决方案
您可能没有通过在触发意图时提供标志来清除以前的活动。在此处传递清除顶部标志:
startActivity(new Intent(this,DriverHomeActivity.class));
推荐阅读
- yocto - requests-unixsocket 的配方构建失败
- c++ - 来自 UTC 时间字符串的 ESP32 setenv() 和 localtime()
- java - 在一个类中组合属性
- java - 在另一个项目中使用您自己的 Java 库?
- asp.net - 在 Asp mvc 中更改日期格式
- c++ - (C ++)在小循环中使用加法运算符的无限零
- r - prcomp.default(data, scale = FALSE, center = FALSE) 中的错误:无法将常量/零列重新缩放为单位方差
- c - 指针和 .txt 文件
- matrix - 如何对包含整数的列表列表中的每个元素应用算术运算?
- r - 在 R 中具有二项分布和空间自相关的 GAM