2016-07-05 70 views
0

我在使用Facebook sdk時出錯。它給我一個OnActivtyResult方法的錯誤。使用facebook sdk登錄onActivityResult發生錯誤

請檢閱我的代碼給下面。

這是logcat的結果:

07-05 22:33:51.762 24690-24690/uni.ek.com.re_think E/AndroidRuntime: FATAL EXCEPTION: main 
                   java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=64206, result=-1, data=Intent { (has extras) }} to activity {uni.ek.com.re_think/uni.ek.com.re_think.MainActivity}: java.lang.NullPointerException 
                    at android.app.ActivityThread.deliverResults(ActivityThread.java:3462) 
                    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3505) 
                    at android.app.ActivityThread.access$1100(ActivityThread.java:150) 
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346) 
                    at android.os.Handler.dispatchMessage(Handler.java:99) 
                    at android.os.Looper.loop(Looper.java:213) 
                    at android.app.ActivityThread.main(ActivityThread.java:5225) 
                    at java.lang.reflect.Method.invokeNative(Native Method) 
                    at java.lang.reflect.Method.invoke(Method.java:525) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
                    at dalvik.system.NativeStart.main(Native Method) 
                    Caused by: java.lang.NullPointerException 
                    at uni.ek.com.re_think.MainActivity.onActivityResult(MainActivity.java:134) 
                    at android.app.Activity.dispatchActivityResult(Activity.java:5322) 
                    at android.app.ActivityThread.deliverResults(ActivityThread.java:3458) 
                    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3505)  
                    at android.app.ActivityThread.access$1100(ActivityThread.java:150)  
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)  
                    at android.os.Handler.dispatchMessage(Handler.java:99)  
                    at android.os.Looper.loop(Looper.java:213)  
                    at android.app.ActivityThread.main(ActivityThread.java:5225)  
                    at java.lang.reflect.Method.invokeNative(Native Method)  
                    at java.lang.reflect.Method.invoke(Method.java:525)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)  
                    at dalvik.system.NativeStart.main(Native Method)  

這是在MainActivity:

package uni.ek.com.re_think; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.Button; 
import android.widget.EditText; 
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; 

public class MainActivity extends AppCompatActivity { 

EditText name,pass; 
Button login; 
LoginButton fb_login; 
String name1,pass1; 
int count,counter; 
CallbackManager callbackManager; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

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

    setContentView(R.layout.activity_main); 






    fb_login= (LoginButton)findViewById(R.id.btnl_fblogin); 
    ////////////////// 
    fb_login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 

      Toast.makeText(getApplicationContext(),"success",Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onCancel() { 

     } 

     @Override 
     public void onError(FacebookException error) { 

     } 
    }); 


} 




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


} 

}

Mainfest.xml

<?xml version="1.0" encoding="utf-8"?> 

<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"> 

    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> 

    <activity android:name="com.facebook.FacebookActivity" 
     android:configChanges= 
      "keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" 
     android:label="@string/app_name" /> 
    <activity android:name=".MainActivity" android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

</application> 

請解決問題

回答

1

callbackManager總是空,因爲它僅僅是一個局部變量。改變你的onCreate填寫類字段/成員像這樣:

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

    FacebookSdk.sdkInitialize(getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 
    //.. the rest of your onCreate 
+0

謝謝先生:) –