0

After authenticating user, retrieve username from firebase database and display it on navigation drawer header .This is my draweractivity and here i have tried datasnapshot too but it returns me null at navigation header!
it says welcome null.

isnt there any method like user.getNamefromDatabase();

package com.example.dell.Swing;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.facebook.FacebookSdk;
import com.facebook.Profile;
import com.facebook.appevents.AppEventsLogger;
import com.facebook.login.LoginManager;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.squareup.picasso.Picasso;

 public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {



private FirebaseAuth firebaseAuth;
private TextView textView;
private Button Logout;
private DatabaseReference databaseReference;

private Profile profile;
private ImageView profilePictureImageView;
private TextView userNameTextView;
// private TextView welcomeText;
// private Button logout;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);



    firebaseAuth = FirebaseAuth.getInstance();
    profile = Profile.getCurrentProfile();

    if( firebaseAuth.getCurrentUser() == null && profile == null){
        finish();
        startActivity(new Intent(getApplicationContext(),LoginActivity2.class));
        finish();
        return;
    }


    if(profile == null){
        FirebaseUser user= firebaseAuth.getCurrentUser();
        userNameTextView = (TextView) navigationView.getHeaderView(0).findViewById(R.id.nav_user_name);
        userNameTextView.setText("Welcome"+user.getEmail());
    }else{
        profilePictureImageView = (ImageView)navigationView.getHeaderView(0).findViewById(R.id.imageView);
        userNameTextView =(TextView)navigationView.getHeaderView(0).findViewById(R.id.nav_user_name);

        Picasso.with(this).load(profile.getProfilePictureUri(200,200)).into(profilePictureImageView);
        userNameTextView.setText(profile.getName());
    }




}

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}





@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_camera) {
        // Handle the camera action
    } else if (id == R.id.nav_gallery) {

    } else if (id == R.id.nav_slideshow) {

    } else if (id == R.id.nav_manage) {

    } else if (id == R.id.nav_share) {

    } else if (id == R.id.nav_logout) {FirebaseAuth.getInstance().signOut();
        LoginManager.getInstance().logOut();
        startActivity(new Intent(MainActivity.this,LoginActivity2.class));
        MainActivity.this.finish();


    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}



}

1 Answers1

1

The only way you have to retrieve your user name is from your FirebaseUser instance. So you will need retrieve a correct value from firebaseAuth.getCurrentUser() to be able to call getDisplayName() to retrieve the user's name, getEmail() to retrieve the user's email and getPhotoUrl()to retrieve the user's photo url.

Other way to achieve that is store the values from your user in FirebaseDatabase. Such like:

"userdata" {
     "accountCreationDAate": "2017-01-25 22:57",
     "age" : 25,
     "username" : "myName",
     "photoUrl" : "customUrl"
......

In that way you will be able to retrieve the user's data also from your database. However, is more simple to retrieve that important values as username, photoUrl and email always from the FirebaseUser instance.

Francisco Durdin Garcia
  • 12,540
  • 9
  • 53
  • 95
  • can you please demonstrate! i already stored my user details into firebase ,i just dont know how to retrieve them. – Arshad Khan Jan 29 '17 at 16:11
  • I suggest you to read about it in the official Firebase documentation: https://firebase.google.com/docs/database/android/read-and-write Also you can check how to correctly store data using Firebase in other community questions such as : http://stackoverflow.com/questions/41869606/update-and-delete-data-in-firebase – Francisco Durdin Garcia Jan 29 '17 at 16:14