-1

I have done a lot of ways to only show the username of the firebase database. but i am getting null values . maybe from you can help me to solve this problem.

this is the database I have. My Firebase Database.

then this is the activity to display the username Activity For Display Username

This is the animation I have created so that you can more easily understand it. Animated GIF

This is my code

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;
}
}
iamkdblue
  • 3,448
  • 2
  • 25
  • 43
rionymous_
  • 11
  • 7
  • actually i think you follow wrong design , follow this will help for better design and easy for you , it contain firebase signIn and signUp methods and lot .https://stackoverflow.com/questions/40404567/how-to-send-verification-email-with-firebase – iamkdblue Apr 15 '18 at 16:13
  • the method that I made right, proven I was able to create an account through an application that I created. indeed the method I make is rare to use it. but I think just to display the username there must be way. – rionymous_ Apr 15 '18 at 16:19

4 Answers4

0

Try this to display username :

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

Hope this helps !

Anonymous
  • 2,184
  • 15
  • 23
  • if I use .child ("test") which exits only username test but not username testing and the other – rionymous_ Apr 15 '18 at 16:06
  • You need to change your firebase structure and make it an array demarcated by id's and not usename's as username's can be same. – Anonymous Apr 16 '18 at 06:43
0

Make User model members Public !

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;
    }
    }
iamkdblue
  • 3,448
  • 2
  • 25
  • 43
0

You can try this:

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.
        }
    });
sylikon
  • 115
  • 1
  • 9
  • I've used your coding but made a force close application – rionymous_ Apr 15 '18 at 16:12
  • Maybe you should reconsider your database design and use built in UI for FireBase https://firebase.google.com/docs/auth/android/firebaseui. That would create user with uniq id and will allow easier acces to user like this :FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); – sylikon Apr 16 '18 at 13:44
0
 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) {

        }
    });