Java 每当我试图从Firebase获取用户名时,它都会返回值,但不会以字符串形式更新
这是我的登录活动。每当我点击登录按钮,它就会成功地让我登录。另一方面,我也在尝试从数据库中获取用户名和配置文件名,它会成功地完全返回值。主要问题是,当Firebase返回值时,它并没有更新到我的字符串中,并且每当我试图检索它时,它都显示为nullJava 每当我试图从Firebase获取用户名时,它都会返回值,但不会以字符串形式更新,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,这是我的登录活动。每当我点击登录按钮,它就会成功地让我登录。另一方面,我也在尝试从数据库中获取用户名和配置文件名,它会成功地完全返回值。主要问题是,当Firebase返回值时,它并没有更新到我的字符串中,并且每当我试图检索它时,它都显示为null public class LoginActivity extends AppCompatActivity { FirebaseAuth firebaseAuth = FirebaseAuth.getInstance (); Fireb
public class LoginActivity extends AppCompatActivity {
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance ();
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference ();
String[] z= {""};
EditText email,password;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_login);
email = findViewById (R.id.editUser);
password = findViewById (R.id.editPass);
final SharedPreferences sharedPreferences = getSharedPreferences ("Login", MODE_PRIVATE);
final SharedPreferences sharedPreferences2 = getSharedPreferences ("isLoginned", MODE_PRIVATE);
final SharedPreferences.Editor editor = sharedPreferences.edit ();
final SharedPreferences.Editor editor2 = sharedPreferences2.edit ();
Button signin = findViewById (R.id.signin);
final ProgressDialog dialog = new ProgressDialog (LoginActivity.this);
dialog.setMessage ("Loging in. Please wait");
dialog.setTitle ("Login User");
dialog.setCancelable (false);
signin.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick(View view) {
dialog.show ();
if(!email.getText ().toString ().equals (null) && !password.getText ().toString ().equals (null)){
firebaseAuth.signInWithEmailAndPassword (email.getText ().toString (),password.getText ().toString ()).addOnCompleteListener (new OnCompleteListener<AuthResult> () {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful ()){
int a = email.getText ().toString ().indexOf ("@");
SplashScreen.USERNAME = email.getText ().toString ().substring (0,a);
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
DataSnapshot snapshot = dataSnapshot.child ("User").child (SplashScreen.USERNAME);
DataSnapshot usernamee = snapshot.child ("Username");
DataSnapshot name = snapshot.child ("Name");
SplashScreen.IDNAME = String.valueOf (usernamee.getValue ());
SplashScreen.NAME = String.valueOf (name.getValue ());
editor.putString ("ussername", SplashScreen.IDNAME);
editor.putString ("name", SplashScreen.NAME);
editor.apply ();
}
@Override
public void onCancelled(DatabaseError error) {
Toast.makeText (LoginActivity.this, error.getMessage (), Toast.LENGTH_SHORT).show ();
}
});
dialog.dismiss ();
editor.putString ("Email",email.getText ().toString ());
editor.putString ("pass",password.getText ().toString ());
editor.putString ("Username",SplashScreen.USERNAME);
editor2.putString ("login","Yes");
editor.apply ();
editor2.apply ();
editor.commit ();
editor2.commit ();
Intent intent = new Intent (LoginActivity.this, WallOfTheApp.class);
startActivity (intent);
finish ();
}
}
}).addOnFailureListener (new OnFailureListener () {
@Override
public void onFailure(@NonNull Exception e) {
dialog.dismiss ();
Toast.makeText (LoginActivity.this, e.getMessage (), Toast.LENGTH_SHORT).show ();
}
});
}
}
});
}
}
这是我的Firebase数据库:
{
"User" : {
"prathamkhurana43" : {
"Mobile Number" : "1234567890",
"Name" : "Pratham",
"Username" : "prathamk22"
}
}
}
每当我第一次单击按钮时,它不会得到值,而是打开
第二次单击“登录”按钮可获取
用户名和配置文件名
试试这个:
DatabaseReference myRef = database.getReference();
myRef.child("User").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnasphot datas: dataSnapshot.getChildren()){
String names=datas.child("Name").getValue().toString();
String usernames=datas.child("Username").getValue().toString();
editor.putString ("ussername",names);
editor.putString ("name", usernames);
editor.apply();
}
这将为您提供可在共享首选项中使用的值name
和username
如果您有此值“prathamkhurana43”
,您也可以这样做:
myRef.child("User").child("prathamkhurana43").addValueEventListener(new ValueEventListener() {
//retrieve data without using the for loop
Yaa每当我在successfull语句中使用log时,它都会在log中显示名称,但当我尝试使用string访问该名称时,它会返回nullcheck,检查您是否输入了错误编辑器.putString(“ussername”,SplashScreen.IDNAME);尝试使用editor.putString(“用户名”,SplashScreen.IDNAME);我之前尝试过,但没有帮助请显示数据库firebase数据库??我不能简单地使用电子邮件,因为用户将输入电子邮件,然后应用程序将检索firebase数据库的名称和用户名什么电子邮件@Prathamkhuranana如果你是指这个
Prathamkhuranana43
,那么只需输入用户在child中输入的值(//在这里),或者只需执行第一种迭代方式,它就不起作用了,我想问题是,当我单击登录按钮时,应用程序获取字符串的上一个值,从数据库获取值后,它更新字符串变量,当我单击“登录”按钮上的其他时间时,它会成功工作。我希望它只在第一次工作。当您单击“登录”按钮时,请不要获取上一个值并仅从数据库获取该值,以便它只在第一次工作
myRef.child("User").child("prathamkhurana43").addValueEventListener(new ValueEventListener() {
//retrieve data without using the for loop