繁体   English   中英

单击Facebook登录按钮会使应用程序崩溃

[英]Facebook Login Button crashes app when clicked

我试图将Facebook登录名添加到我的Android应用程序。 最初启动应用程序时,它登录时没有任何问题,但是之后,无论何时我尝试登录,应用程序都会崩溃。

MainActivity.java如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());
    setContentView(R.layout.activity_main);
    callbackManager = CallbackManager.Factory.create();
    loginButton = (LoginButton) findViewById(R.id.login_button);
    List<String> permissionNeeds = Arrays.asList("public_profile", "user_friends");
    loginButton.setReadPermissions(permissionNeeds);

    try {
        PackageInfo info = getPackageManager().getPackageInfo("com.example.ryans_000.facebooklogin", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }

    } catch (PackageManager.NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {


        @Override
        public void onSuccess(LoginResult loginResult) {
            System.out.println("onSuccess");
        }

        @Override
        public void onCancel() {
            System.out.println("onCancel");
        }

        @Override
        public void onError(FacebookException exception) {
            Log.v("LoginActivity", exception.getCause().toString()); }
    });
}

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

content_main包含该按钮的以下代码:

<com.facebook.login.widget.LoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" />

Logcat显示以下内容:

02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime: FATAL EXCEPTION: main
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime: Process: com.example.ryans_000.facebooklogin, PID: 23263
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=64206, result=-1, data=Intent { (has extras) }} to activity {com.example.ryans_000.facebooklogin/com.example.ryans_000.facebooklogin.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Throwable.toString()' on a null object reference
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.app.ActivityThread.deliverResults(ActivityThread.java:3988)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.app.ActivityThread.handleSendResult(ActivityThread.java:4038)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.app.ActivityThread.access$1400(ActivityThread.java:150)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1443)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:168)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5845)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Throwable.toString()' on a null object reference
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at com.example.ryans_000.facebooklogin.MainActivity$1.onError(MainActivity.java:92)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at com.facebook.login.LoginManager.finishLogin(LoginManager.java:579)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at com.facebook.login.LoginManager.onActivityResult(LoginManager.java:216)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at com.facebook.login.LoginManager$1.onActivityResult(LoginManager.java:159)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at com.facebook.internal.CallbackManagerImpl.onActivityResult(CallbackManagerImpl.java:82)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at com.example.ryans_000.facebooklogin.MainActivity.onActivityResult(MainActivity.java:100)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.app.Activity.dispatchActivityResult(Activity.java:6439)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.app.ActivityThread.deliverResults(ActivityThread.java:3984)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.app.ActivityThread.handleSendResult(ActivityThread.java:4038) 
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.app.ActivityThread.access$1400(ActivityThread.java:150) 
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1443) 
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102) 
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:168) 
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5845) 
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method) 
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
02-29 09:34:45.306 23263-23263/com.example.ryans_000.facebooklogin E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 

我认为在你

    @Override
    public void onError(FacebookException exception) {
        Log.v("LoginActivity", exception.getCause().toString()); }

exception.getCause为null,因此尝试将其转换为字符串将显示null指针异常。 尝试解决该问题。

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Throwable.toString()' on a null object reference

它最有可能指向onError()中使用toString()方法的那一行,因此请尝试更改它。 祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM