i need to sign in with GoogleSignIn button and get the name of the user to show it into the TextView in the header of the Navigation Bar, but i cant access it.
MainActivity.java
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener,
GoogleApiClient.OnConnectionFailedListener {
ImageView photoImageViewe;
TextView nameTextView, emailTextView, txt3ady;
private GoogleApiClient googleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Drawer Inflater
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);
nameTextView = (TextView) findViewById(R.id.nameTextView);
emailTextView = (TextView) findViewById(R.id.emailTextView);
photoImageViewe = (ImageView) findViewById(R.id.photoImageView);
//Google SignIn
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
googleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this,this)
.addApi(Auth.GOOGLE_SIGN_IN_API,gso)
.build();
}//end onCreate
public void logOut(View view){
Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess())
{
goLogInScreen();
}
else {
Toast.makeText(getApplicationContext(), "not_signed_out", Toast.LENGTH_SHORT).show();
}
}
});
}//end logOut()
public void revoke(View view) {
Auth.GoogleSignInApi.revokeAccess(googleApiClient).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess()){
goLogInScreen();
}
else{
Toast.makeText(getApplicationContext(),"not_revoke",Toast.LENGTH_SHORT).show();
}
}
});
}//end revoke()
@Override
protected void onStart() {
super.onStart();
OptionalPendingResult<GoogleSignInResult> op = Auth.GoogleSignInApi.silentSignIn(googleApiClient);
if (op.isDone())
{
GoogleSignInResult result = op.get();
handleSignInResults(result);
}
else
{
op.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(@NonNull GoogleSignInResult googleSignInResult) {
handleSignInResults(googleSignInResult);
}
});
}//end else
}//end onStart()
private void handleSignInResults(GoogleSignInResult result) {
if (result.isSuccess())
{
//////HERE//////////////////////////////////////
GoogleSignInAccount account = result.getSignInAccount();
assert account != null;
nameTextView.setText(account.getDisplayName());
//emailTextView.setText(account.getEmail());
//Glide.with(this).load(account.getPhotoUrl()).into(photoImageViewe);
}//end if
else {
goLogInScreen();
}//end else
}//end handleSignInResults()
private void goLogInScreen() {
Intent intent = new Intent(this,LogInActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}//end goLogInScreen
//END GOOGLE SIGNIN
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}//end onBackPressed
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@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_send) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Toast.makeText(getApplicationContext(),"no internet",
Toast.LENGTH_LONG).show();
}
}//end class Main Activity
Notice: the login_activity doesn't have any problem and it works, the problem is how i get these info from Google Button and put it on the navigation drawer header menu's TextView(just the name) and i will do the others (email-photo)
com.google.android.material.navigation.NavigationView. Represents a standard navigation menu for application. The menu contents can be populated by a menu resource file. NavigationView is typically placed inside a DrawerLayout .
You need to inflate the header view as it is not inflated automatically .
View header = mNavigationView.getHeaderView(0);
mNameTextView = (TextView) header.findViewById(R.id.nameTextView);
mNameTextView.setText("XYZ");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With