能够在模拟器中打开应用程序,但无法启动Google Signin的活动

问题描述 投票:0回答:1

main activity.Java

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

    setContentView(R.layout.activity_main);
    initializeControls();
    loginWithFB();

    toolbar = (Toolbar) findViewById(R.id.toolbar);


    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);


    View inflatedView = getLayoutInflater().inflate(R.layout.fragment_login_social, null);
    SignInButton sign = inflatedView.findViewById(R.id.sign_in_button);
    sign.setOnClickListener(this);

    GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().build();
    googleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this, this).addApi(Auth.GOOGLE_SIGN_IN_API, signInOptions).build();
}

public void onClick(View view) {
        switch (view.getId()){
            case R.id.sign_in_button:
                sign();
                break;
        }
    }
    private void sign() {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

}

private void handleResult(GoogleSignInResult result) {
    Log.d(TAG, "handleSignInResult:" + result.isSuccess());
    if (result.isSuccess()) {
        // Signed in successfully, show authenticated UI.
        GoogleSignInAccount acct = result.getSignInAccount();
        updateUI(true);
    } else {
        // Signed out, show unauthenticated UI.
        updateUI(false);
    }
}

private void updateUI(boolean b) {
}


private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new LoginSocial(), "ONE");
    adapter.addFragment(new Updates(), "TWO");
    viewPager.setAdapter(adapter);
}

@Override
public void onFragmentInteraction(Uri uri) {

}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

TextView txtStatus;
LoginButton fb_login;
CallbackManager callbackManager;

private void initializeControls() {
    callbackManager = CallbackManager.Factory.create();
    txtStatus = (TextView) findViewById(R.id.txtStatus);
    fb_login = (LoginButton) findViewById(R.id.fb_login);
}

private void loginWithFB() {
    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            txtStatus.setText("Login Success");
        }

        @Override
        public void onCancel() {
            txtStatus.setText("Login Cancelled.");
        }

        @Override
        public void onError(FacebookException error) {
            txtStatus.setText("Login Error:" + error.getMessage());
        }
    });
}

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

    if (FacebookSdk.isFacebookRequestCode(requestCode)) {
        // Facebook
        callbackManager.onActivityResult(requestCode, resultCode, data);
    } else if (requestCode == RC_SIGN_IN) {
        // Google
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        handleResult(result);
    }
}

logcat的

7-09 15:04:17.723 3231-3231 / com.example.pranavgopal.myapplication E / AndroidRuntime:FATAL EXCEPTION:main进程:com.example.pranavgopal.myapplication,PID:3231 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.pranavgopal.myapplication / com.example.pranavgopal.myapplication.MainActivity}:java.lang.NullPointerException:尝试调用虚方法'void com.google.android.gms.common.SignInButton.setOnClickListener(android。 view.View $ OnClickListener)'在android.app.ActivityThread.perleLaunchActivity(ActivityThread.java:2665)的空对象引用,在android.app.ActivityThread.-的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)。在Android.os.Looper.loop(Looper.java)的android.app.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477)上的wrap12(ActivityThread.java) :154)在android.app.ActivityThread.main(ActivityThread.java:6119)的java.lang.reflect.Method.invoke(N) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)引起的:java.lang。 NullPointerException:尝试在com.example.pranavgopal.myapplication.MainActivity.onCreate上的空对象引用上调用虚方法'void com.google.android.gms.common.SignInButton.setOnClickListener(android.view.View $ OnClickListener)'(在Android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)的android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)的android.app.Activity.performCreate(Activity.java:6679)上的MainActivity.java:53) )在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)在android.app.ActivityThread.-wrap12(ActivityThread.java)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477)的机器人。 os.Handler.dispatchMessage(Handler.java:102)在android.app的android.os.Looper.loop(Looper.java:154)。 Activity.Thread.main(ActivityThread.java:6119)位于com.android的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)的java.lang.reflect.Method.invoke(Native Method)中。 internal.os.ZygoteInit.main(ZygoteInit.java:776)*

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.pranavgopal.myapplication.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="fixed"
            app:tabGravity="fill"/>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"  />
</android.support.constraint.ConstraintLayout> 
android google-signin android-tablayout
1个回答
1
投票

你在这条线上有一个NullPointerException

sign.setOnClickListener(this);

这可能是因为当你拨打这一行时找不到sign

sign = (SignInButton) findViewById(R.id.sign_in_button);

确保XML id正确(R.id.sign_in_button)。

© www.soinside.com 2019 - 2024. All rights reserved.