Here is my Firebase database file
package com.example.ram.myapp;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class LoginActivity extends AppCompatActivity {
EditText username,password;
Button login,signUp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
performLoginCheck();
}
void performLoginCheck(){
final int[] t = new int[1];
t[0] = 0;
username= findViewById(R.id.uname);
password= findViewById(R.id.upass);
signUp=findViewById(R.id.btnsignup);
signUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(LoginActivity.this, signUpActivity.class));
}
});
login=findViewById(R.id.btnlogin);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String name=username.getText().toString();
final String pass=password.getText().toString();
DatabaseReference database= FirebaseDatabase.getInstance().getReference();
database.child("profile").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot findKeyValue : dataSnapshot.getChildren()) {
if (findKeyValue.child("username").getValue() != null && findKeyValue.child("password").getValue() != null) {
String nameFound = (String) findKeyValue.child("username").getValue();
String passwordFound = (String) findKeyValue.child("password").getValue();
System.out.println(nameFound);
System.out.println(passwordFound);
System.out.println(name);
System.out.println(pass);
if (name.equals(nameFound)) {
System.out.println("true");
if (pass.equals(passwordFound)) {
System.out.println("true go");
t[0] =1;
System.out.println(t[0]);
}
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
if(t[0] == 1) {
Toast text = Toast.makeText(getApplicationContext(),"Hello,world", Toast.LENGTH_LONG);
text.show();
}
else{
Toast text = Toast.makeText(getApplicationContext(),"Hello,loser", Toast.LENGTH_LONG);
text.show();
}
}
});
}
}
以上代码适用于我的登录活动,只有满足用户名和密码,我才需要转移到另一个活动。
问题是我需要两次单击登录按钮才能执行该功能。我是这个firebase数据库的新手,我需要有关onDatachange
的一些指导以及如何在按钮onclick
监听器上使用它。
答案 0 :(得分:0)
这种情况正在发生,因为您在t[0] = 1
方法中设置了onDataChange()
,该方法具有异步行为,在术语上意味着,当您检查if(t[0] == 1)
时,数据不是&# 39; t尚未在数据库中设置,因此第一次将此语句评估为false
。快速解决方法是在int[] t
方法中移动数组onDataChange()
的声明。还要在方法中使用所有if语句。这样,您就可以使用t[0]
的正确值。如果您想使用t[0]
outsite方法,我建议您从 post 中查看我的anwser的最后一部分,并查看此 {{ 3}} 强>