gpt4 book ai didi

android - 在 Firebase 中保存数据后 Activity 重启

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:52 24 4
gpt4 key购买 nike

我试图将用户信息保存在 Firebase 数据库中,但发生了一个奇怪的行为,使保存按钮重新启动相同的 Activity ,而不是我为下一个 Activity 所做的 Intent。

 public void userData () {
user.setFName(Fname.getText().toString());
user.setLName(Lname.getText().toString());
user.setEmail(Email.getText().toString());
user.setAddress(userAddress.getText().toString());
user.setPassword(UserInfo.getString("Password", ""));
user.setID(CicID.getText().toString());
user.setUsername(Usnm.getText().toString());
if (bAdmn.isChecked()) user.setMajor("Business Administrator");
if (BTech.isChecked()) user.setMajor("Business Tech");
if (masscom.isChecked()) user.setMajor("Mass Com");
if (Eng.isChecked()) user.setMajor("Engineering");

final String us = user.getUsername();
Log.i("Username", us);
MyDatabase1.child("USERS").child(us).setValue(user);
Intent i = new Intent(getApplicationContext() , chooseCoursesActivity.class);
startActivity(i);

}

这是保存按钮的方法,请注意,如果用户想更改他的名字或姓氏或其他内容,我想更新配置文件 Activity 中的用户信息。但点击保存按钮后,数据被正确保存,但 Intent 从未完成。它重新创建相同的 Activity 。在登录 Activity 中有一个登录按钮,用于检查用户名和密码,然后尝试根据数据登录,如果登录成功,它将转到该配置文件 Activity 。配置文件 Activity 中的保存按钮重新执行登录 Activity 中登录按钮中的方法,该方法检查所有内容并转到导致重新创建问题的配置文件 Activity 。这是登录按钮的代码:

    MyDatabase = FirebaseDatabase.getInstance().getReference();
MyDatabase.child("USERS").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
boolean exists = false;

for (DataSnapshot child : dataSnapshot.getChildren()) {
final Map<String, Object> model = (Map<String, Object>) child.getValue();

if (model.get("username").equals(Username.getText().toString())) {
exists = true;
Log.i("USername"," Correct");


if(exists){
MyDatabase.child("USERS").orderByChild("username").equalTo(Username.getText().toString())

.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

for (DataSnapshot child :dataSnapshot.getChildren()){
Log.i("Password",child.getValue().toString());
Log.i( "Password",child.child("password").toString());
if(password.getText().toString().equals(child.child("password").getValue())){
Log.i("LOGIN","Success");
loginsuccessful = true ;

if(loginsuccessful){

saveCredntials(Username.getText().toString(),password.getText().toString());


Intent i2 = new Intent(getApplicationContext(), ProfileActivity.class);
i2.putExtra("loginStats",IsLoggedIn);
i2.putExtra("Username",Un);

i2.putExtra("Password",Pw);


startActivity(i2);
finish();}
}else{
Log.i("LOGIN","Failed");
loginsuccessful= false ;

}

}

}

@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show();
}
});
}
break;

}else {
Log.i("LOGIN","FAiled");

}

}
}
@Override
public void onCancelled(DatabaseError databaseError) {

}
});
}

抱歉让这个太长了,但我不知道问题所在。

最佳答案

我刚刚解决了这个问题!根据您的情况,请避免使用addValueEventListener,因为它会监听您对数据库所做的所有更改。这就是为什么每次您对数据库进行任何更改时,无论您是否调用该登录函数,addValueEventListener (startActivity) 中的代码都会被执行。

我的建议是使用 addListenerForSingleValueEvent 而不是 addValueEventListener项目到 addListenerForSingleValueEvent),或者如果您真的不需要它,您甚至可以删除监听器。不知道是不是一个好的设计,但应该可以解决你的问题。

关于android - 在 Firebase 中保存数据后 Activity 重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43826175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com