Java 当我切换到“活动”或首先调用onDataChanged时,onCreate()未运行
我正在做一个学校项目,我正在使用firebase身份验证和电子邮件和密码。当用户登录时,我遇到问题,然后返回“登录”页面并尝试创建新帐户。当单击submit按钮创建他的新帐户而不是返回登录页面时,它将转到users主页面。只有当用户已签名并尝试注册另一个帐户时,才会发生这种情况。我已经尝试在用户返回登录页面时注销用户,但没有成功。这是我的密码: 登录页面:Java 当我切换到“活动”或首先调用onDataChanged时,onCreate()未运行,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在做一个学校项目,我正在使用firebase身份验证和电子邮件和密码。当用户登录时,我遇到问题,然后返回“登录”页面并尝试创建新帐户。当单击submit按钮创建他的新帐户而不是返回登录页面时,它将转到users主页面。只有当用户已签名并尝试注册另一个帐户时,才会发生这种情况。我已经尝试在用户返回登录页面时注销用户,但没有成功。这是我的密码: 登录页面: public class SignIn extends AppCompatActivity { EditText email,pass;
public class SignIn extends AppCompatActivity {
EditText email,pass;
private FirebaseAuth mAuth;
FirebaseUser user;
FirebaseDatabase db;
DatabaseReference mRef;
String type,name;
public ProgressDialog pd;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_in);
mAuth = FirebaseAuth.getInstance();
email = findViewById(R.id.inpSigninEmail);
pass = findViewById(R.id.inpSigninPass);
db.getInstance();
mRef = FirebaseDatabase.getInstance().getReference().child("Users/");
type=null;
name=null;
context=this;
Log.e("asd","Loginoncreate");
}
public void signIn (View view){
if (email.getText().toString().trim().length() < 1 || pass.getText().toString().trim().length() < 1){
Toast.makeText(getApplicationContext(), "Please fill your information.", Toast.LENGTH_LONG).show();
}else{
pd = new ProgressDialog(this);
pd.setMessage("Signing in...");
pd.show();
mAuth.signInWithEmailAndPassword(email.getText().toString(), pass.getText().toString()).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
user = mAuth.getCurrentUser();
mRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
while (type==null){
for (DataSnapshot dataSnapshot : snapshot.getChildren()){
type = String.valueOf(dataSnapshot.child(user.getUid()).child("/Type").getValue());
if (type!="null"){
break;
}
}
}
while (name==null){
for (DataSnapshot dataSnapshot : snapshot.getChildren()){
name = String.valueOf(dataSnapshot.child(user.getUid()).child("/Name").getValue());
if (name!="null"){
break;
}
}
}
pd.dismiss();
if (type.matches("user")){
Intent intent = new Intent(context, UserMain.class);
intent.putExtra("name", name);
type=null;
name=null;
startActivity(intent);
finish();
Log.e("as","loginUser");
}else{
Intent intent = new Intent(context, CompanyMain.class);
intent.putExtra("name", name);
startActivity(intent);
finish();
type=null;
name=null;
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
pd.dismiss();
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}else{
pd.dismiss();
Toast.makeText(getApplicationContext(), task.getException().getMessage(),Toast.LENGTH_LONG).show();
}
}
});
}
}
public void signUp (View view){
startActivity(new Intent(SignIn.this, SignUp.class));
finish();
}
公共类登录扩展了AppCompatActivity{
编辑文本邮件,传递;
私人消防队;
FirebaseUser用户;
FirebaseDB数据库;
数据库参考mRef;
字符串类型、名称;
公共发展对话;
语境;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u sign\u in);
mAuth=FirebaseAuth.getInstance();
email=findviewbyd(R.id.inpSigninEmail);
通过=findViewById(R.id.inpSigninPass);
db.getInstance();
mRef=FirebaseDatabase.getInstance().getReference().child(“Users/”);
type=null;
name=null;
上下文=这个;
Log.e(“asd”、“LoginCreate”);
}
公共无效登录(查看){
if(email.getText().toString().trim().length()<1 | | pass.getText().toString().trim().length()<1){
Toast.makeText(getApplicationContext(),“请填写您的信息”,Toast.LENGTH\u LONG.show();
}否则{
pd=新进度对话框(本);
pd.setMessage(“登录…”);
pd.show();
mAuth.signInWithEmailAndPassword(email.getText().toString(),pass.getText().toString()).addOnCompleteListener(这是新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
user=mAuth.getCurrentUser();
mRef.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
while(type==null){
对于(DataSnapshot DataSnapshot:snapshot.getChildren()){
type=String.valueOf(dataSnapshot.child(user.getUid()).child(“/type”).getValue());
如果(类型!=“null”){
打破
}
}
}
while(name==null){
对于(DataSnapshot DataSnapshot:snapshot.getChildren()){
name=String.valueOf(dataSnapshot.child(user.getUid()).child(“/name”).getValue());
如果(名称!=“空”){
打破
}
}
}
pd.解散();
if(type.matches(“用户”)){
意图=新意图(上下文,UserMain.class);
意向。额外(“名称”,名称);
type=null;
name=null;
星触觉(意向);
完成();
Log.e(“作为”、“登录用户”);
}否则{
意向意向=新意向(上下文,CompanyMain.class);
意向。额外(“名称”,名称);
星触觉(意向);
完成();
type=null;
name=null;
}
}
@凌驾
已取消公共void(@NonNull DatabaseError){
pd.解散();
Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_SHORT.show();
}
});
}否则{
pd.解散();
Toast.makeText(getApplicationContext(),task.getException().getMessage(),Toast.LENGTH_LONG).show();
}
}
});
}
}
公共无效注册(视图){
startActivity(新意图(SignIn.this,SignUp.class));
完成();
}
}
注册页面:
public class SignUp extends AppCompatActivity {
EditText name,email,pass;
private FirebaseAuth mAuth;
FirebaseDatabase db;
FirebaseUser user;
RadioButton Rbtn;
RadioGroup Rgroup;
DatabaseReference mRef;
boolean out = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_up);
mAuth = FirebaseAuth.getInstance();
name = findViewById(R.id.inpSignupName);
email = findViewById(R.id.inpSignupEmail);
pass = findViewById(R.id.inpSignupPass);
Rgroup = findViewById(R.id.radioGroup);
db = FirebaseDatabase.getInstance();
mRef = db.getReference("Users/");
Log.e("asd","Signuponcreate");
}
public void submit (View view){
if (name.getText().toString().trim().length() < 1 || email.getText().toString().trim().length() < 1 || pass.getText().toString().trim().length() < 1){
Toast.makeText(getApplicationContext(), "Please fill your information.", Toast.LENGTH_LONG).show();
}else{
mAuth.createUserWithEmailAndPassword(email.getText().toString() , pass.getText().toString()).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
Toast.makeText(getApplicationContext(),"Sign Up success!",Toast.LENGTH_LONG).show();
user = mAuth.getCurrentUser();
int radioId = Rgroup.getCheckedRadioButtonId();
Rbtn = findViewById(radioId);
if (Rbtn.getText().equals("User")){
mRef.child("/Normal").child(user.getUid()).child("/Name").setValue(name.getText().toString());
mRef.child("/Normal").child(user.getUid()).child("/Type").setValue("user");
}else{
mRef.child("/Company").child(user.getUid()).child("/Name").setValue(name.getText().toString());
mRef.child("/Company").child(user.getUid()).child("/Type").setValue("company");
}
startActivity(new Intent(SignUp.this, SignIn.class));
finish();
Log.e("as","signupUserGotoSignin");
}else{
Toast.makeText(getApplicationContext(), task.getException().getMessage(),Toast.LENGTH_LONG).show();
}
}
});
}
}
公共类注册扩展了AppCompative活动{
编辑文本名称、电子邮件、通行证;
私人消防队;
FirebaseDB数据库;
FirebaseUser用户;
无线按钮Rbtn;
放射组Rgroup;
数据库参考mRef;
布尔输出=假;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u注册);
mAuth=FirebaseAuth.getInstance();
name=findviewbyd(R.id.inpSignupName);
email=findviewbyd(R.id.inSignupEmail);
通过=findViewById(R.id.inpSignupPass);
Rgroup=findviewbyd(R.id.radioGroup);
db=FirebaseDatabase.getInstance();
mRef=db.getReference(“Users/”);
Log.e(“asd”、“Signuponcreate”);
}
公共作废提交(查看){
if(name.getText().toString().trim().length()<1 | | email.getText().toString().trim().length()<1 | | | pass.getText().toString().trim().length()<1){
Toast.makeText(getApplicationContext(),“请填写您的信息”,Toast.LENGTH\u LONG.show();
}否则{
mAuth.createUserWithEmailAndPassword(email.getText().toString(),pass.getText().toString()).addOnCompleteListener(这是新的OnCompleteListener()){
@凌驾
未完成的公共无效(@NonNull)
android:onClick="signIn"
Button button = findViewById(R.id.SignInbutton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//put your signIn button all code here
}
});