作者:彤彤柯安_839 | 来源:互联网 | 2023-02-07 11:40
我需要使用GoogleSignIn按钮登录并获取用户的名称以将其显示在导航栏标题中的TextView中,但我无法访问它.
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() {
@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() {
@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 op = Auth.GoogleSignInApi.silentSignIn(googleApiClient);
if (op.isDone())
{
GoogleSignInResult result = op.get();
handleSignInResults(result);
}
else
{
op.setResultCallback(new ResultCallback() {
@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
注意: login_activity没有任何问题,它可以工作,问题是我如何从谷歌按钮获取这些信息并将其放在导航抽屉标题菜单的TextView(只是名称),我会做其他人(电子邮件照片) )
1> Farmaan Elah..:
您需要对标题视图进行充气,因为标题视图不会自动充气.
View header = mNavigationView.getHeaderView(0);
mNameTextView = (TextView) header.findViewById(R.id.nameTextView);
mNameTextView.setText("XYZ");