我正在尝试将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)
答案 0 :(得分:1)
我想你的
@Override
public void onError(FacebookException exception) {
Log.v("LoginActivity", exception.getCause().toString()); }
exception.getCause为null因此尝试将其转换为字符串显示空指针异常。尝试修复它。
答案 1 :(得分:0)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Throwable.toString()' on a null object reference
最有可能的是,它指出使用onString()方法的行在onError()中,所以尝试改变它。 祝你好运!