在Android Studio中登录和读写数据,无错误但不工作
我遇到了一个问题,日志和android监视器中都没有错误 但是,当我单击“登录”时,它不起作用,什么也没有发生 顺便说一下,我正在制作一个使用firebase数据库的应用程序,我正在登录和显示用户详细信息部分 也许我的登录有问题?还是在我的显示器上?这是我的密码: 登录: 在这里,我从数据库中读取数据,并在用户登录时显示数据: 以下是我的数据库的外观:在Android Studio中登录和读写数据,无错误但不工作,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我遇到了一个问题,日志和android监视器中都没有错误 但是,当我单击“登录”时,它不起作用,什么也没有发生 顺便说一下,我正在制作一个使用firebase数据库的应用程序,我正在登录和显示用户详细信息部分 也许我的登录有问题?还是在我的显示器上?这是我的密码: 登录: 在这里,我从数据库中读取数据,并在用户登录时显示数据: 以下是我的数据库的外观: 你能建议我做什么吗?我已经试过很多东西了。但当我点击登录按钮时,仍然没有发生任何事情。也许欢迎活动花费的时间太长,无法读取数据?或者可能登录活动
你能建议我做什么吗?我已经试过很多东西了。但当我点击登录按钮时,仍然没有发生任何事情。也许欢迎活动花费的时间太长,无法读取数据?或者可能登录活动是错误的?感谢您的帮助!谢谢大家! 调试你的代码。是的,调试你的代码你好,谢谢你的回复。我已经调试了代码。还是没什么变化。我使用了run按钮右侧的Debug选项。或者有没有其他的方法来调试这是你们告诉我的@JesperQvTry以这种方式mdatabaseReference.childusers.orderByKey.equalTouid.addListenerForSingleValueEvent和compare key。!任务成功后。@AtifAbbAsi你好,朋友。我应该在哪一部分加上这个?我很困惑。谢谢换句话说,不是在欢迎活动中获取Uid。我应该从登录类中获取UID,然后在登录通过身份验证的情况下将其传递给欢迎活动?我这样做的方式是在数据库中的一个child中包含userID。我现在将尝试启动它。@Rekt我想告诉您的是,您可以获取整个用户模型,并将其传递到欢迎屏幕,然后获取任何用户详细信息你在找我。!
All You Have to do is First Use Auth for Login then Send Current user Id to Your Firebase Database and check if user exists or not.!
Here is sample code hope this might help you.!
//get User Entered Values from EditText Fields.!
String email=emailEditText.getText().toString().trim();
String password=passwordEditText.getText().toString().trim();
/logging in the user
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
//if the task is successfull
if(task.isSuccessful()){
AddEventFireBaseListner(mAuth.getCurrentUser().getUid(),email, password);
}
private void AddEventFireBaseListner(String uid,String email,String password){
final User user;
mdatabaseReference.child("users").orderByKey().equalTo(uid).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {
user= postsnapshot.getValue(User.class);
}//end of comments
if(user!=null){
if (user.getemail().equalsIgnoreCase(email) && user.getpassword().equalsIgnoreCase(password)) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
//Parcalable object
intent.putExtra("userObj",user);
startActivity(intent);
}
}
}
else{
Snackbar snackbar = Snackbar.make(coordinatorLayout, "Invalid user", Snackbar.LENGTH_LONG).setAction("HIDE", new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
snackbar.show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
});//End
}
and for sending whole `user` object to next activity try to use `Parcelable`
public class User implements Parcelable {
String name;
String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
protected User(Parcel in) {
name = in.readString();
email = in.readString();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(email);
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
return new User(in);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}
public class Welcome extends AppCompatActivity {
private static final String TAG = "ViewDatabase";
//ADD FIREBASE STUFF
//DECLARE FIELDS
Button outBtn;
TextView welcome;
private DatabaseReference myRef;
private FirebaseDatabase mFirebaseDatabase;
private String userID;
private ListView mListView;
//FIREBASE AUTH FIELDS
private FirebaseAuth nAuth;
private FirebaseAuth.AuthStateListener nAuthlistener;
//GET USER KEY FROM INTENT
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
//ASSIGN IDS
outBtn = (Button) findViewById(R.id.logoutBtn);
welcome = (TextView) findViewById(R.id.WelcomeName);
mListView = (ListView) findViewById(R.id.listview);
//ASSIGN INSTANCE
myRef = mFirebaseDatabase.getReference().child("Users");
nAuth = FirebaseAuth.getInstance();
FirebaseUser User = nAuth.getCurrentUser();
userID = User.getUid();
nAuthlistener = new FirebaseAuth.AuthStateListener(){
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser User = firebaseAuth.getCurrentUser();
if (User != null){
Log.d(TAG, "onAuthStateChanged:signed_in:" + User.getUid());
Toast.makeText(Welcome.this, "Successfully signed in with: " + User.getEmail(), Toast.LENGTH_LONG).show();
}else{
Log.d(TAG, "onAuthStateChanged:signed_out" + User.getUid());
Toast.makeText(Welcome.this, "Successfully signed out.", Toast.LENGTH_LONG).show();
}
}
};
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
/* myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});*/
outBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
nAuth.signOut();
finish();
startActivity(new Intent(Welcome.this, MainActivity.class));
}
});
}
private void showData(DataSnapshot dataSnapshot) {
//Changed here
for(DataSnapshot ds : dataSnapshot.getChildren()){
UserInformation uInfo = new UserInformation();
uInfo.setUserName(ds.child(userID).getValue(UserInformation.class).getUserName());
uInfo.setUserAge(ds.child(userID).getValue(UserInformation.class).getUserAge());
uInfo.setUserBirth(ds.child(userID).getValue(UserInformation.class).getUserBirth());
uInfo.setUserPhone(ds.child(userID).getValue(UserInformation.class).getUserPhone());
uInfo.setUserUserName(ds.child(userID).getValue(UserInformation.class).getUserUserName());
uInfo.setUserUserName(ds.child(userID).getValue(UserInformation.class).getUserUserName());
Log.d(TAG, "showData: snapshot: " + ds);
Log.d(TAG, "showData: snapshot: " + ds.child("Users"));
//display all info taken
Log.d(TAG, "showData: userName: " + uInfo.getUserName());
Log.d(TAG, "showData: userAge: " + uInfo.getUserAge());
Log.d(TAG, "showData: userBirth: " + uInfo.getUserBirth());
Log.d(TAG, "showData: userPhone: " + uInfo.getUserPhone());
Log.d(TAG, "showData: userUserName: " + uInfo.getUserUserName());
ArrayList<String> array = new ArrayList<>();
array.add(uInfo.getUserName());
array.add(uInfo.getUserAge());
array.add(uInfo.getUserBirth());
array.add(uInfo.getUserPhone());
array.add(uInfo.getUserUserName());
ArrayAdapter adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,array);
mListView.setAdapter(adapter);
}
}
@Override
protected void onStart() {
super.onStart();
nAuth.addAuthStateListener(nAuthlistener);
}
@Override
protected void onStop() {
super.onStop();
nAuth.removeAuthStateListener(nAuthlistener);
}
}
All You Have to do is First Use Auth for Login then Send Current user Id to Your Firebase Database and check if user exists or not.!
Here is sample code hope this might help you.!
//get User Entered Values from EditText Fields.!
String email=emailEditText.getText().toString().trim();
String password=passwordEditText.getText().toString().trim();
/logging in the user
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
//if the task is successfull
if(task.isSuccessful()){
AddEventFireBaseListner(mAuth.getCurrentUser().getUid(),email, password);
}
private void AddEventFireBaseListner(String uid,String email,String password){
final User user;
mdatabaseReference.child("users").orderByKey().equalTo(uid).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {
user= postsnapshot.getValue(User.class);
}//end of comments
if(user!=null){
if (user.getemail().equalsIgnoreCase(email) && user.getpassword().equalsIgnoreCase(password)) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
//Parcalable object
intent.putExtra("userObj",user);
startActivity(intent);
}
}
}
else{
Snackbar snackbar = Snackbar.make(coordinatorLayout, "Invalid user", Snackbar.LENGTH_LONG).setAction("HIDE", new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
snackbar.show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
});//End
}
and for sending whole `user` object to next activity try to use `Parcelable`
public class User implements Parcelable {
String name;
String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
protected User(Parcel in) {
name = in.readString();
email = in.readString();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(email);
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
return new User(in);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}