2015-10-27 114 views
0

我正在開發一個應用程序,用戶將使用登錄訪問Facebook。 正在返回一個錯誤並進行研究,顯然這將是關鍵問題,但關鍵在於Manifest。登錄Facebook - Xamarin

以下是清單

<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/stg_app_nome" android:theme="@style/AppTheme"> 
    <activity android:name="com.facebook.LoginActivity" 
      android:theme="@android:style/Theme.Translucent.NoTitleBar" 
      android:label="@string/stg_app_nome" /> 

    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="xxxxxxx"/> 
</application> 

佈局的摘錄

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

我有那麼的onCreate

base.OnCreate (bundle); 
FacebookSdk.SdkInitialize (ApplicationContext); 
callbackManager = CallbackManagerFactory.Create(); 
SetContentView (Resource.Layout.Login); 
loginButton = (LoginButton) FindViewById(Resource.Id.login_button); 
loginButton.RegisterCallback (callbackManager, cCallbackFacebook); 

類CCallback我在示例中看到和我使用

public class CCallback : Java.Lang.Object, IFacebookCallback { 
    public void OnCancel() { 
     Android.Util.Log.Warn("LIVE MATCH","Canceled"); 
    } 

    public void OnError(FacebookException error) { 
     Android.Util.Log.Error("LIVE MATCH", error.Message); 
    } 

    public void OnSuccess(Java.Lang.Object result) { 
     Android.Util.Log.Info("LIVE MATCH", "Success"); 
    } 
} 

時返回

顯示java.lang.NullPointerException處 java.util.concurrent.ConcurrentHashMap.containsKey (ConcurrentHashMap.java:911)處 com.facebook.internal.Utility誤差在.queryAppSettings(Utility.java:822)在 在com.facebook.login.widget .LoginButton $ 1.run (LoginButton.java:489)在 java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java :1112)at java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:587)維持在java.lang.Thread.run (Thread.java:841)

+0

你是什麼錯誤? (stack trace?) – SushiHangover

+0

抱歉,忘記報告錯誤。 通過將錯誤放在最後來編輯問題。 –

回答

0

你在你的XML資源聲明登錄按鈕?

<com.facebook.login.widget.LoginButton 
     android:id="@+id/splash_welcome_loginbtn" 
     android:layout_width="match_parent" 
     android:text="@string/continueFB" 
     android:layout_height="54dp" 
     android:minHeight="44dp" 
     android:layout_gravity="center_horizontal" 
     android:layout_above="@+id/splash_welcome_readybtn" 
     android:layout_marginBottom="13dp" 
     android:layout_marginLeft="13dp" 
     android:layout_marginRight="13dp" /> 

您是否使用過這些程序集?

using Xamarin.Facebook; 
using Xamarin.Facebook.Login; 

...

 ICallbackManager callbackManager; 
     callbackManager = CallbackManagerFactory.Create(); 

你的實現似乎wird我...

+0

是的,我宣佈了XML按鈕。 我正在使用Xamarin.Facebook使用程序集 ; 在onCreate的開始實現base.OnCreate(bundle); FacebookSdk.Sdk初始化(ApplicationContext); callbackManager CallbackManagerFactory.Create =(); SetContentView(Resource.Layout.Login); –

-1
please try this. if it does not work.. uncomment commented code and try once. 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager = CallbackManager.Factory.create(); 
     setContentView(R.layout.activity_main); 
     /* 
     try { 
      PackageInfo info = getPackageManager().getPackageInfo("com.example.fbtest", 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 (NameNotFoundException e) { 

     } catch (NoSuchAlgorithmException e) { 

     }*/ 
     loginButton = (LoginButton) findViewById(R.id.login_button); 
     // Callback registration 
     loginButton.registerCallback(callbackManager, new  FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       userId = loginResult.getAccessToken().getUserId(); 
       token = loginResult.getAccessToken().getToken(); 
      } 

      @Override 
      public void onCancel() { 
       // App code 
      } 

      @Override 
      public void onError(FacebookException exception) { 
       // App code 
      } 
     });  
    } 
+0

無法識別FacebookCallback –

+0

請添加LoginButton loginButton; \t CallbackManager callbackManager; \t String userId; \t String token; – Ashutoshg

+0

請注意這個問題是關於Xamarin和你的代碼片段是在Java中。這不是很有幫助。 – Micer