【发布时间】: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