Java Facebook登录空指针异常

Java Facebook登录空指针异常,java,android,facebook,android-studio,Java,Android,Facebook,Android Studio,我是Android开发的新手,正在尝试构建带有facebook登录功能的应用程序。 运行应用程序时,我收到一个错误,不幸的是,应用程序已停止。 我想不出来。请帮我弄清楚 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.amdroid

我是Android开发的新手,正在尝试构建带有facebook登录功能的应用程序。 运行应用程序时,我收到一个错误,不幸的是,应用程序已停止。 我想不出来。请帮我弄清楚

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.amdroid.route">
<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id"/>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.amdroid.route.MainActivity">
    <com.facebook.login.widget.LoginButton
        android:id="@+id/fb_login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true" />
</RelativeLayout>
package com.example.amdroid.route;

import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Base64;
import android.util.Log;
import android.widget.Toast;

import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MainActivity extends AppCompatActivity {

private CallbackManager callbackManager;
private LoginButton fbLoginButton;

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

    FacebookSdk.sdkInitialize(getApplicationContext());
    callbackManager = CallbackManager.Factory.create();


    //You need this method to be used only once to configure
    //your key hash in your App Console at
    // developers.facebook.com/apps

    getFbKeyHash("com.example.amdroid.route");

    setContentView(R.layout.activity_main);
    fbLoginButton = (LoginButton)findViewById(R.id.fb_login_button);

    fbLoginButton.registerCallback(callbackManager, new         
    FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {

            System.out.println("Facebook Login Successful!");
            System.out.println("Logged in user Details : ");
            System.out.println("--------------------------");
            System.out.println("User ID  : " +   
            loginResult.getAccessToken().getUserId());
            System.out.println("Authentication Token : " +                  
            loginResult.getAccessToken().getToken());
            Toast.makeText(MainActivity.this, "Login Successful!",  
            Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCancel() {
            Toast.makeText(MainActivity.this, "Login cancelled by user!", 
            Toast.LENGTH_LONG).show();
            System.out.println("Facebook Login failed!!");

        }

        @Override
        public void onError(FacebookException e) {
            Toast.makeText(MainActivity.this, "Login unsuccessful!", 
            Toast.LENGTH_LONG).show();
            System.out.println("Facebook Login failed!!");
        }
    });
}





public void getFbKeyHash(String packageName) {

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                packageName,
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("YourKeyHash :", Base64.encodeToString(md.digest(), 
            Base64.DEFAULT));
            System.out.println("YourKeyHash: "+  
            Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (PackageManager.NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

}

@Override
protected void onActivityResult(int reqCode, int resCode, Intent i) {
    callbackManager.onActivityResult(reqCode, resCode, i);
}
}
    04-06 00:50:41.517 31495-31528/com.example.amdroid.route E/AndroidRuntime:
 FATAL EXCEPTION: AsyncTask #5                                                                            
 Process: com.example.amdroid.route, PID: 31495

 java.lang.NullPointerException: Attempt to invoke virtual method 'int 
 java.lang.Object.hashCode()' on a null object reference

 at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:772)
                                                                           \     
 at   

java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:800)

at com.facebook.internal.Utility.queryAppSettings(Utility.java:823)

at com.facebook.login.widget.LoginButton$1.run(LoginButton.java:489)


at      java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)



at     
at java.lang.Thread.run(Thread.java:818)