Java 谷歌登录后Android应用程序崩溃
Android Studio新手。我在测试我的应用程序时遇到了一个问题。在使用Google登录后,它会崩溃,并说“不幸的是,Aisier已停止”。我正在尝试在登录到导航抽屉后引导用户,该抽屉中还有他们的信息,如个人资料图片、姓名和电子邮件。我是不是遗漏了一些代码 MyNavigation.java:Java 谷歌登录后Android应用程序崩溃,java,android,Java,Android,Android Studio新手。我在测试我的应用程序时遇到了一个问题。在使用Google登录后,它会崩溃,并说“不幸的是,Aisier已停止”。我正在尝试在登录到导航抽屉后引导用户,该抽屉中还有他们的信息,如个人资料图片、姓名和电子邮件。我是不是遗漏了一些代码 MyNavigation.java: package com.example.android.aisier; import android.content.Intent; import android.graphics.Typefac
package com.example.android.aisier;
import android.content.Intent;
import android.graphics.Typeface;
import android.support.annotation.NonNull;
import android.support.constraint.solver.SolverVariable;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.OptionalPendingResult;
import com.google.android.gms.common.api.ResultCallback;
public class Navigation extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mToggle;
private ImageView photoImageView;
private TextView nameTextView;
private TextView emailTextView;
private GoogleApiClient googleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
mToggle = new ActionBarDrawerToggle(this,mDrawerLayout,R.string.open,R.string.close);
mDrawerLayout.addDrawerListener(mToggle);
NavigationView nvDrawer = (NavigationView) findViewById(R.id.nv);
mToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setupDrawerContent(nvDrawer);
photoImageView = (ImageView) findViewById(R.id.photoImageView);
nameTextView = (TextView) findViewById(R.id.nameTextView);
emailTextView = (TextView) findViewById(R.id.nameTextView);
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();
}
@Override
protected void onStart() {
super.onStart();
OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(googleApiClient);
if (opr.isDone()) {
GoogleSignInResult result = opr.get();
handleSignInResult(result);
} else {
opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(@NonNull GoogleSignInResult googleSignInResult) {
handleSignInResult(googleSignInResult);
}
});
}
}
private void handleSignInResult(GoogleSignInResult result) {
if (result.isSuccess()) {
GoogleSignInAccount account = result.getSignInAccount();
nameTextView.setText(account.getDisplayName());
emailTextView.setText(account.getEmail());
Glide.with(this).load(account.getPhotoUrl()).into(photoImageView);
} else {
Intent intent = new Intent(this, SignIn.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void selectItemDrawer(MenuItem menuItem) {
Fragment myFragment = null;
Class fragmentClass;
switch (menuItem.getItemId()) {
case R.id.db:
fragmentClass = Dashboard.class;
break;
case R.id.converter:
fragmentClass = Converter.class;
break;
case R.id.location:
fragmentClass = Location.class;
break;
case R.id.translator:
fragmentClass = Translate.class;
break;
case R.id.memo:
fragmentClass = Memo.class;
break;
default:
fragmentClass = Dashboard.class;
}
try {
myFragment = (Fragment) fragmentClass.newInstance();
}
catch (Exception e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flcontent,myFragment).commit();
menuItem.setChecked(true);
setTitle(menuItem.getTitle());
mDrawerLayout.closeDrawers();
}
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
selectItemDrawer(item);
return true;
}
});
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.android.aisier.Navigation">
<FrameLayout
android:id="@+id/flcontent"
android:background="@drawable/background"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nv"
app:headerLayout="@layout/header"
android:layout_width="264dp"
android:layout_height="match_parent"
android:background="@color/white"
app:itemTextColor="@color/darkgrey"
app:itemIconTint="@color/darkgrey"
app:menu="@menu/navigationmenu"
android:layout_gravity="start">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="160dp"
android:background="@drawable/header"
android:padding="20dp">
<ImageView
android:id="@+id/photoImageView"
android:layout_width="75dp"
android:layout_height="75dp" />
<TextView
android:id="@+id/nameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textStyle="bold"
android:layout_marginTop="5dp"/>
<TextView
android:id="@+id/emailTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="16dp"
/>
</LinearLayout>
package com.example.android.aisier;
导入android.content.Intent;
导入android.graphics.Typeface;
导入android.support.annotation.NonNull;
导入android.support.constraint.solver.SolverVariable;
导入android.support.design.widget.NavigationView;
导入android.support.v4.app.Fragment;
导入android.support.v4.app.FragmentManager;
导入android.support.v4.widget.DrawerLayout;
导入android.support.v7.app.ActionBarDrawerToggle;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.MenuItem;
导入android.widget.FrameLayout;
导入android.widget.ImageView;
导入android.widget.TextView;
导入com.bumptech.glide.glide;
导入com.google.android.gms.auth.api.auth;
导入com.google.android.gms.auth.api.signin.GoogleSignInAccount;
导入com.google.android.gms.auth.api.signin.GoogleSignInOptions;
导入com.google.android.gms.auth.api.signin.GoogleSignInResult;
导入com.google.android.gms.common.ConnectionResult;
导入com.google.android.gms.common.api.GoogleAppClient;
导入com.google.android.gms.common.api.OptionalPendingResult;
导入com.google.android.gms.common.api.ResultCallback;
公共类导航扩展AppCompativeActivity实现GoogleAppClient.OnConnectionFailedListener{
私人抽屉布局mDrawerLayout;
私人行动bardrawertoggle mtogle;
私人影像视图photoImageView;
私有文本视图名称文本视图;
私有文本视图emailTextView;
私人GoogleapClient GoogleapClient;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u导航);
mDrawerLayout=(抽屉布局)findViewById(R.id.drawer);
mToggle=newactionBarDrawerToggle(this,mDrawerLayout,R.string.open,R.string.close);
mDrawerLayout.addDrawerListener(MTOGLE);
NavigationView nvDrawer=(NavigationView)findViewById(R.id.nv);
mToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setupDrawerContent(nvDrawer);
photoImageView=(ImageView)findViewById(R.id.photoImageView);
nameTextView=(TextView)findViewById(R.id.nameTextView);
emailTextView=(TextView)findViewById(R.id.nameTextView);
GoogleSignenOptions gso=新建GoogleSignenOptions.Builder(GoogleSignenOptions.DEFAULT\u登录)
.requestEmail()
.build();
GoogleapClient=新的GoogleapClient.Builder(此)
.enableAutoManage(这个,这个)
.addApi(Auth.GOOGLE\u SIGN\u IN\u API,gso)
.build();
}
@凌驾
受保护的void onStart(){
super.onStart();
OptionalPendingResult opr=授权谷歌签名Napi.silentSignIn(谷歌客户端);
if(opr.isDone()){
GoogleSignInResult结果=操作获取();
handleSignInResult(结果);
}否则{
操作setResultCallback(新的ResultCallback(){
@凌驾
public void onResult(@NonNull GoogleSignInResult GoogleSignInResult){
handleSignInResult(谷歌SignInResult);
}
});
}
}
私有无效handleSignInResult(Google SignInResult结果){
if(result.issucess()){
GoogleSignInAccount account=result.getSignInAccount();
nameTextView.setText(account.getDisplayName());
emailTextView.setText(account.getEmail());
将(account.getPhotoUrl())加载到(photoImageView)中;
}否则{
意向意向=新意向(此,签名类);
intent.addFlags(intent.FLAG_活动_清除_顶部| intent.FLAG_活动_清除_任务| intent.FLAG_活动_新任务);
星触觉(意向);
}
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
如果(MTOGLE.onOptionsItemSelected(项目)){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
公共无效selectItemDrawer(MenuItem MenuItem){
片段myFragment=null;
类碎片类;
开关(menuItem.getItemId()){
案例R.id.db:
fragmentClass=Dashboard.class;
打破
案例R.id.转换器:
fragmentClass=Converter.class;
打破
案例R.id.位置:
fragmentClass=Location.class;
打破
案例R.id.translator:
fragmentClass=Translate.class;
打破
案例R.id.备忘录:
fragmentClass=Memo.class;
打破
违约:
fragmentClass=Dashboard.class;
}
试一试{
myFragment=(Fragment)fragmentClass.newInstance();
}
捕获(例外e){
e、 printStackTrace();
}
FragmentManager FragmentManager=getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flcontent,myFragment.commit();
menuItem.setChecked(true);
setTitle(menuItem.getTitle());
mDrawerLayout.closeDrawers();
}
私有void setupDrawerContent(导航视图导航视图){
navigationView.setNavigationItemSelectedListener(新建navigationView.OnNavigationItemSelectedListener()){
@凌驾
公共布尔值onNavigationItemSelected(@NonNull MenuItem item){
emailTextView = (TextView) findViewById(R.id.nameTextView);
emailTextView = (TextView) findViewById(R.id.emailTextView);