在Android Studio中登录和读取/写入数据,没有错误,但没有工作 [英] Login and Reading/Writing Data in Android Studio, No Error but Not Working

查看:307
本文介绍了在Android Studio中登录和读取/写入数据,没有错误,但没有工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



然而,当我点击登录时,它不起作用,我们已经遇到了一个问题,没有错误,在日志和Android监视器。顺便说一句,我正在做一个使用firebase数据库的应用程序,而且我在Login和Dispalying User Details部分。

>

也许我的登录有问题?或在我的显示?这是我的代码:

登录:

  package com.loginpack; 

导入...


公共类LoginActivity继承AppCompatActivity {

//视图和小部件
按钮loginBtn;
EditText userEmailEdit,userPasswordEdit;

//字符串字段
字符串userEmailString,userPasswordString;

// FIREBASE AUTH FIELDS
FirebaseAuth mAuth;
FirebaseAuth.AuthStateListener nAuthlistener;

DatabaseReference mDatabaseRef;

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);

// ASSIGN IDS
loginBtn =(Button)findViewById(R.id.loginBtn);
userEmailEdit =(EditText)findViewById(R.id.loginEditText);
userPasswordEdit =(EditText)findViewById(R.id.loginPasswordEditText);

// ASSIGN INSTANCE
$ b $ //在这里更改
mDatabaseRef = FirebaseDatabase.getInstance()。getReference()。child(Users);
mAuth = FirebaseAuth.getInstance();
$ b nAuthlistener = new FirebaseAuth.AuthStateListener(){
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){
FirebaseUser User = firebaseAuth.getCurrentUser();

if(User!= null){

final String emailForVer = User.getEmail();

mDatabaseRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
checkUserValidation(dataSnapshot,emailForVer);
}

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

} else {

}
}
};

// ONCLICK LISTENER
loginBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
/ /执行登录操作
userEmailString = userEmailEdit.getText()。toString()。trim();
userPasswordString = userPasswordEdit.getText()。toString()。trim();

if(!TextUtils.isEmpty(userEmailString)&!TextUtils.isEmpty(userPasswordString)&& userPasswordString!= null&& userEmailString!= null)
{
mAuth。 (@NonNull Task< AuthResult>任务){
if(task.isSuccessful() ))
{

mDatabaseRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
checkUserValidation(dataSnapshot,userEmailString);
}

@Override
public void onCancelled(DatabaseError databaseError){
}
});
} else
{
Toast.makeText(LoginActivity.this,用户登录失败,Toast.LENGTH_LONG).show();
Toast.makeText(LoginActivity.this,task.getException()。getMessage(),Toast.LENGTH_LONG).show();
}
}
});
}
}
});

private void checkUserValidation(DataSnapshot dataSnapshot,String emailForVer){
Iterator iterator = dataSnapshot.getChildren()。iterator();

while(iterator.hasNext())
{
DataSnapshot dataUser =(DataSnapshot)iterator.next();
if(String.valueOf(dataUser.child(emailUser)。getValue())。equals(emailForVer)&& amp; dataUser.child(emailUser)!= null){
if (String.valueOf(dataUser.child(isVerified).getValue())。equals(unverified)&& dataUser.child(isVerified)!= null){
Intent in = new意图(LoginActivity.this,Profile.class);
in.putExtra(USER_KEY,String.valueOf(dataUser.child(userKey)。getValue()));
startActivity(in);
} else {

startActivity(new Intent(LoginActivity.this,Welcome.class));




@Override
保护无效的onStart(){
super.onStart();
mAuth.addAuthStateListener(nAuthlistener);


@Override
protected void onStop(){
super.onStop();
mAuth.removeAuthStateListener(nAuthlistener);





$ b这里是我读取我的数据的地方数据库并在用户登录时显示它:

  public class Welcome extends AppCompatActivity {


private static final String TAG =ViewDatabase;
//添加FIREBASE邮件

//声明字段
按钮outBtn;
TextView欢迎;
私人DatabaseReference myRef;
私有FirebaseDatabase mFirebaseDatabase;
private String userID;
私人ListView mListView;

// FIREBASE AUTH FIELDS
private FirebaseAuth nAuth;
私人FirebaseAuth.AuthStateListener nAuthlistener;


//从用户键获取用户键
$ b @覆盖
保护无效的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);

$ b // ASSIGN INSTANCE $ b $ myRef = mFirebaseDatabase.getReference()。child(Users);
nAuth = FirebaseAuth.getInstance();
FirebaseUser User = nAuth.getCurrentUser();
userID = User.getUid();
$ b 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,成功登录:+ User.getEmail(),Toast.LENGTH_LONG).show();

} else {

Log.d(TAG,onAuthStateChanged:signed_out+ User.getUid());
Toast.makeText(Welcome.this,成功退出,Toast.LENGTH_LONG).show();
}
}
};
myRef.addListenerForSingleValueEvent(new ValueEventListener(){
@Override $ b $ public void onDataChange(DataSnapshot dataSnapshot){$ b $ showData(dataSnapshot);
}

@Override
public void onCancelled(DatabaseError databaseError){
$ b}
});

$ b / * myRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){



$ b @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));
}
}); (DataSnapshot ds:dataSnapshot.getChildren()){
}
$ b private void showData(DataSnapshot dataSnapshot){

//在这里更改
b
$ b 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));

//显示所有获取的信息

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);


$ b $ @覆盖
保护无效onStart(){
super.onStart();
nAuth.addAuthStateListener(nAuthlistener);


@Override
protected void onStop(){
super.onStop();
nAuth.removeAuthStateListener(nAuthlistener);




$ b $ p $这些是我的数据库的样子:



.imgur.com / UaIkY.pngrel =nofollow noreferrer>

有什么可以建议的吗?我已经尝试了很多东西。但是当我单击登录按钮时仍然不会发生。也许欢迎活动花费太长时间来读取数据?或者也许登录活动是错误的?任何帮助表示赞赏!谢谢!

解决方案

 将当前用户ID添加到您的Firebase数据库,并检查用户是否存在。 
这里是示例代码,希望这可以帮助你。



//从EditText字段获取用户输入值。
String email = emailEditText.getText()。toString()。trim();
String password = passwordEditText.getText()。toString()。trim();
$ b $ /记录用户
mAuth.signInWithEmailAndPassword(email,password)
.addOnCompleteListener(this,new OnCompleteListener< AuthResult>(){
@Override
public void onComplete(@NonNull Task< AuthResult> task){

//如果任务成功
if(task.isSuccessful()){

AddEventFireBaseListner(mAuth.getCurrentUser()。getUid(),email,password);

}






private void AddEventFireBaseListner(String uid,String email,String password){

最终用户;
mdatabaseReference.child(users)。orderByKey()。equalTo (DataSnapshot postsnapshot:dataSnapshot.getChildren()){$ b).addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){


$ b user = postsnapshot.getValue(User.class);



} //注释结束


if(user!= null ){

if(user.getemail()。equalsIgnoreCase(email)&& user.getpassword()。equalsIgnoreCase(password)){

Intent intent = new Intent(getApplicationContext(),MainActivity.class);

//可出租对象
intent.putExtra(userObj,user);

startActivity(intent);







$ {
Snackbar snackbar = Snackbar。 make(coordinatorLayout,Invalid user,Snackbar.LENGTH_LONG).setAction(HIDE,new View.OnClickListener(){
@Override
public void onClick(View view){

}
});
snackbar.show();





$ @覆盖
public void onCancelled(DatabaseError databaseError){



$ b和发送整个`user`对象到下一个活动尝试使用`Parcelable`





public class User实现Parcelable {


字符串名称;

字符串电子邮件;
$ b $ 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;


$ b保护用户(Parcel in){
name = in.readString();
email = in.readString();

$ b @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];
}
};

$ b @覆盖
public String toString(){
returnUser {+
name ='+ name +'\' '+
',email ='+ email +'\''+
'}';
}


}


I have run into a problem, where there are no errors, both in the logs and the android monitor.

However when I click login it doesn't work nothing happens at all.

By the way I'm making an app that uses firebase database, and I'm on the Login and Dispalying User Details part.

Perhaps something is wrong with my Login? or in my display? Here's my code:

Login:

package com.loginpack;

import...


public class LoginActivity extends AppCompatActivity {

    //VIEW AND WIDGETS
    Button loginBtn;
    EditText userEmailEdit, userPasswordEdit;

    //STRING FIELDS
    String userEmailString, userPasswordString;

    //FIREBASE AUTH FIELDS
    FirebaseAuth mAuth;
    FirebaseAuth.AuthStateListener nAuthlistener;

    DatabaseReference mDatabaseRef;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        //ASSIGN IDS
        loginBtn = (Button) findViewById(R.id.loginBtn);
        userEmailEdit = (EditText) findViewById(R.id.loginEditText);
        userPasswordEdit = (EditText) findViewById(R.id.loginPasswordEditText);

         //ASSIGN INSTANCE

        //Changed here
        mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Users");
        mAuth = FirebaseAuth.getInstance();

        nAuthlistener = new FirebaseAuth.AuthStateListener(){
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser User = firebaseAuth.getCurrentUser();

                if (User != null){

                    final String emailForVer = User.getEmail();

                    mDatabaseRef.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            checkUserValidation(dataSnapshot,emailForVer);
                        }

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

                }else{

                }
            }
        };

        //ONCLICK LISTENER
        loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Perform Login Operation
               userEmailString = userEmailEdit.getText().toString().trim();
               userPasswordString = userPasswordEdit.getText().toString().trim();

                if(!TextUtils.isEmpty(userEmailString) && !TextUtils.isEmpty(userPasswordString) && userPasswordString != null && userEmailString != null)
                {
                    mAuth.signInWithEmailAndPassword(userEmailString, userPasswordString).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful())
                            {

                                mDatabaseRef.addValueEventListener(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(DataSnapshot dataSnapshot) {
                                            checkUserValidation(dataSnapshot, userEmailString);
                                    }

                                    @Override
                                    public void onCancelled(DatabaseError databaseError) {
                                    }
                                });
                            }else
                            {
                                Toast.makeText(LoginActivity.this, "User Login Failed", Toast.LENGTH_LONG).show();
                                Toast.makeText(LoginActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
                            }
                        }
                    });
                }
            }
        });
    }
    private void checkUserValidation(DataSnapshot dataSnapshot, String emailForVer) {
        Iterator iterator  = dataSnapshot.getChildren().iterator();

        while(iterator.hasNext())
        {
            DataSnapshot dataUser  = (DataSnapshot) iterator.next();
            if(String.valueOf(dataUser.child("emailUser").getValue()).equals(emailForVer) && dataUser.child("emailUser") != null) {
                if (String.valueOf(dataUser.child("isVerified").getValue()).equals("unverified") && dataUser.child("isVerified") != null) {
                    Intent in = new Intent(LoginActivity.this, Profile.class);
                    in.putExtra("USER_KEY", String.valueOf(dataUser.child("userKey").getValue()));
                    startActivity(in);
                } else {

                    startActivity(new Intent(LoginActivity.this, Welcome.class));
                }
            }
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        mAuth.addAuthStateListener(nAuthlistener);
    }

    @Override
    protected void onStop() {
        super.onStop();
        mAuth.removeAuthStateListener(nAuthlistener);
    }
}

here's where I read the data from my database and diplay it when the user logs in:

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);
    }
}

Here's what my database looks like:

Is there anything you can suggest that I do? I already tried a lot of stuff. but still notihng happens when I click the login button. Maybe the welcome activity is taking too long to read the data? or perhaps the Login activity is wrong? Any help is appreciated! Thank you!

解决方案

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 + '\'' +
                    '}';
        }


    }

这篇关于在Android Studio中登录和读取/写入数据,没有错误,但没有工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆