【问题标题】:Is there any way to just pass a "user" object instead of all the variables of user有没有办法只传递一个“用户”对象而不是用户的所有变量
【发布时间】:2022-01-04 07:40:13
【问题描述】:

我有一个登录页面,现在在用户登录后,我传递了它的所有数据,如usernamepassword 等。我想知道我是否有可能像一个完整的用户一样传递我可以使用 getter 和 setter 来获取与用户相关的信息。我正在使用 Firebase 进行这个项目,所以也许我可以检查当前登录的用户或其他什么,我不确定哪种方法最适合这个。如果有这样的方法,请告诉我。

我目前如何传递数据:

if (dataSnapshot.exists()) {

    username.setError(null);
    username.setErrorEnabled(false);
    
    String passwordFromDB = dataSnapshot.child(userEnteredUsername).child("password").getValue(String.class);
    
    if (passwordFromDB.equals(userEnteredPassword)) {
        username.setError(null);
        username.setErrorEnabled(false);
    
        String userNameFromDB = dataSnapshot.child(userEnteredUsername).child("username").getValue(String.class);
        String ageFromDB = dataSnapshot.child(userEnteredUsername).child("age").getValue(String.class);
        String creditsFromDB = dataSnapshot.child(userEnteredUsername).child("credits").getValue(String.class);
        String idFromDB = dataSnapshot.child(userEnteredUsername).child("id").getValue(String.class);
    
        Intent intent = new Intent(getApplicationContext(),HomePage.class);
    
        intent.putExtra("username",userNameFromDB);
        intent.putExtra("password",passwordFromDB);
        intent.putExtra("age",ageFromDB);
        intent.putExtra("credits",creditsFromDB);
        intent.putExtra("id",idFromDB);
    
                    
        Toast toast = Toast.makeText(getApplicationContext(),"Login Successful",Toast.LENGTH_SHORT);
        toast.show();
        startActivity(intent);

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    有没有办法只传递一个“用户”对象而不是用户的所有变量?

    肯定有。您可以添加整个用户对象,而不是添加所有这些值。但要实现这一点,您必须创建一个如下所示的模型类:

    class User implements Serializable {
        String username, password, age, credits, id;
    
        public User(String username, String password, String age, String credits, String id) {
            this.username = username;
            this.password = password;
            this.age = age;
            this.credits = credits;
            this.id = id;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    ", age='" + age + '\'' +
                    ", credits='" + credits + '\'' +
                    ", id='" + id + '\'' +
                    '}';
        }
    }
    

    不要忘记实现Serializable 接口。现在要将对象添加到意图中,请像这样创建它:

    String userNameFromDB = dataSnapshot.child(userEnteredUsername).child("username").getValue(String.class);
    String passwordFromDB = dataSnapshot.child(userEnteredUsername).child("password").getValue(String.class);
    String ageFromDB = dataSnapshot.child(userEnteredUsername).child("age").getValue(String.class);
    String creditsFromDB = dataSnapshot.child(userEnteredUsername).child("credits").getValue(String.class);
    String idFromDB = dataSnapshot.child(userEnteredUsername).child("id").getValue(String.class);
    User user = new User(userNameFromDB, passwordFromDB, ageFromDB, creditsFromDB, idFromDB);
    Intent intent = new Intent(getApplicationContext(),HomePage.class);
    intent.putExtra("user", user);
    

    若要在其他活动中取回它,请使用以下代码行:

    User user = (User) getIntent().getSerializableExtra("user");
    Log.d("TAG", user);
    

    【讨论】:

    • 没关系,我意识到我把“implements Serializable”放在了错误的类中。感谢您的帮助。
    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 2022-11-22
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多