【问题标题】:How to display username Firebase in android如何在android中显示用户名Firebase
【发布时间】:2018-09-25 09:11:31
【问题描述】:

我做了很多方法来只显示 firebase 数据库的用户名。但我得到空值。也许你可以帮我解决这个问题。

这是我拥有的数据库。 My Firebase Database.

那么这是显示用户名的活动 Activity For Display Username

这是我创建的动画,以便您更容易理解。 Animated GIF

这是我的代码

FirstActivity.Java

public class FirstActivity extends AppCompatActivity {

TextView textView;
FirebaseDatabase database;
DatabaseReference reference;
Toolbar toolbar;

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

    toolbar = findViewById(R.id.my_toolbar);
    setSupportActionBar(toolbar);

    database = FirebaseDatabase.getInstance();
    textView = findViewById(R.id.tvselamatdatang);
    reference = database.getReference("Users");
    reference.addValueEventListener(new ValueEventListener() {
        @SuppressLint("SetTextI18n")
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String username = dataSnapshot.child("username").getValue(String.class);
            textView.setText("Welcome" + username);
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
}

LoginActivity.Java

public class LoginActivity extends AppCompatActivity {

FirebaseDatabase database;
DatabaseReference users;

ProgressBar progressBar;
EditText editTextUsername, editTextPassword;
Button buttonLogin;
TextView textViewSignUp;


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

    database = FirebaseDatabase.getInstance();
    users = database.getReference("Users");
    progressBar = (ProgressBar) findViewById(R.id.progressbar);

    editTextUsername = (EditText) findViewById(R.id.editTextUsername);
    editTextPassword = (EditText) findViewById(R.id.editTextPassword);

    buttonLogin = (Button) findViewById(R.id.buttonLogin);
    buttonLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            signIn(editTextUsername.getText().toString(),
                    editTextPassword.getText().toString());
        }
    });

    textViewSignUp = (TextView) findViewById(R.id.textViewSignup);
    textViewSignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(LoginActivity.this, SignUpActivity.class);
            startActivity(intent);
        }
    });

}

private void signIn(final String username, final String password) {
    users.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.child(username).exists()){
                if (!username.isEmpty()){
                    User login = dataSnapshot.child(username).getValue(User.class);
                    if (login.getPassword().equals(password)){
                        Toast.makeText(LoginActivity.this, "Success Login", Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(getApplicationContext(), FirstActivity.class);
                        startActivity(intent);
                    }
                    else {
                        Toast.makeText(LoginActivity.this, "Password is Wrong", Toast.LENGTH_SHORT).show();
                    }
                }
                else Toast.makeText(LoginActivity.this, "Username is not Registered", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
}

SignUpActivity.Java

public class SignUpActivity extends AppCompatActivity {

FirebaseDatabase database;
DatabaseReference users;

ProgressBar progressBar;
EditText editTextEmail, editTextUsername, editTextPassword;
Button btnSignUp;
TextView textViewLogin;

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

    database = FirebaseDatabase.getInstance();
    users = database.getReference("Users");

    progressBar = (ProgressBar) findViewById(R.id.progressbar);

    editTextEmail = (EditText) findViewById(R.id.editTextEmail);
    editTextUsername = (EditText) findViewById(R.id.editTextUsername);
    editTextPassword = (EditText) findViewById(R.id.editTextPassword);

    textViewLogin = (TextView) findViewById(R.id.textViewLogin);
    textViewLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(SignUpActivity.this, LoginActivity.class);
            startActivity(intent);
        }
    });

    btnSignUp = (Button) findViewById(R.id.buttonSignUp);

    btnSignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final User user = new User(editTextUsername.getText().toString(),
                    editTextPassword.getText().toString(),
                    editTextEmail.getText().toString());
            users.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.child(user.getUsername()).exists())
                        Toast.makeText(SignUpActivity.this, "The Username is Already Exist!", Toast.LENGTH_SHORT).show();
                    else {
                        users.child(user.getUsername()).setValue(user);
                        Toast.makeText(SignUpActivity.this, "Success Register!", Toast.LENGTH_SHORT).show();
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    });

}
}

User.Java

public class User {

private String username;
private String password;
private String email;

public User() {

}

public User(String username, String password, String email) {
    this.username = username;
    this.password = password;
    this.email = email;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}
}

【问题讨论】:

  • 其实我认为你的设计是错误的,遵循这将有助于更好的设计和方便你,它包含firebase登录和注册方法和很多。stackoverflow.com/questions/40404567/…
  • 我做对的方法,证明我能够通过我创建的应用程序创建一个帐户。确实我做的方法很少用。但我认为只是为了显示用户名必须有办法。

标签: java android firebase firebase-realtime-database


【解决方案1】:
 database = FirebaseDatabase.getInstance();
    reference .addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String username = (String) dataSnapshot.child(auth.getCurrentUser().getUid()).child("basics")
                    .child("username").getValue(String.class);
            if (username == null)
                userName.setText("Hello, Anonymous");
             else
            userName.setText("Hello, "+username);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

【讨论】:

    【解决方案2】:

    你可以试试这个:

    reference.addValueEventListener(
        new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // for example: if you're expecting your user's data as an object of the "User" class.
                User user = dataSnapshot.getValue(User.class);
                String username = user.getUsername();
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
                // read query is cancelled.
            }
        });
    

    【讨论】:

    • 我使用了你的编码,但做了一个强制关闭应用程序
    • 也许您应该重新考虑您的数据库设计并使用 FireBase firebase.google.com/docs/auth/android/firebaseui 的内置 UI。这将创建具有 uniq id 的用户,并允许像这样更轻松地访问用户:FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    【解决方案3】:

    试试这个来显示用户名:

    String username = (String)dataSnapshot.child("test").child("username").getValue();
    

    希望这会有所帮助!

    【讨论】:

    • 如果我使用 .child ("test") 仅退出用户名测试但不退出用户名测试和其他
    • 您需要更改您的 firebase 结构,并使其成为一个由 id 而不是 usename 划分的数组,因为用户名可以相同。
    【解决方案4】:

    将用户模型成员设为公开!

    public class User {
    
        public String username;
        public String password;
        public String email;
    
        public User() {
    
        }
    
        public User(String username, String password, String email) {
            this.username = username;
            this.password = password;
            this.email = email;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多