Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android Studio中登录和读写数据,无错误但不工作_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

在Android Studio中登录和读写数据,无错误但不工作

在Android Studio中登录和读写数据,无错误但不工作,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我遇到了一个问题,日志和android监视器中都没有错误 但是,当我单击“登录”时,它不起作用,什么也没有发生 顺便说一下,我正在制作一个使用firebase数据库的应用程序,我正在登录和显示用户详细信息部分 也许我的登录有问题?还是在我的显示器上?这是我的密码: 登录: 在这里,我从数据库中读取数据,并在用户登录时显示数据: 以下是我的数据库的外观: 你能建议我做什么吗?我已经试过很多东西了。但当我点击登录按钮时,仍然没有发生任何事情。也许欢迎活动花费的时间太长,无法读取数据?或者可能登录活动

我遇到了一个问题,日志和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 + '\'' +
                    '}';
        }


    }