2014-01-05 25 views
3

我想添加Facebook到已經完成的LibGDX遊戲。但是,當我試圖檢查當前會話時,它將返回null。我試圖做一個新的會話,而不是使用,和我得到一個空指針錯誤:applicationId不能爲null,但XML語法是正確的

01-04 19:49:15.433: E/AndroidRuntime(16540): FATAL EXCEPTION: main 
01-04 19:49:15.433: E/AndroidRuntime(16540): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pressx.thedevice/com.pressx.thedevice.MainActivity}: java.lang.NullPointerException: Argument 'applicationId' cannot be null 
01-04 19:49:15.433: E/AndroidRuntime(16540): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2070) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2095) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at android.app.ActivityThread.access$600(ActivityThread.java:135) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at android.os.Looper.loop(Looper.java:137) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at android.app.ActivityThread.main(ActivityThread.java:4849) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at java.lang.reflect.Method.invokeNative(Native Method) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at java.lang.reflect.Method.invoke(Method.java:511) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at dalvik.system.NativeStart.main(Native Method) 
01-04 19:49:15.433: E/AndroidRuntime(16540): Caused by: java.lang.NullPointerException: Argument 'applicationId' cannot be null 
01-04 19:49:15.433: E/AndroidRuntime(16540): at com.facebook.internal.Validate.notNull(Validate.java:29) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at com.facebook.Session.<init>(Session.java:227) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at com.facebook.Session.<init>(Session.java:216) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at com.facebook.Session$Builder.build(Session.java:1576) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at com.facebook.Session.openActiveSession(Session.java:888) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at com.facebook.Session.openActiveSession(Session.java:830) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at com.pressx.facebook.FacebookAndroid.<init>(FacebookAndroid.java:27) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at com.pressx.thedevice.MainActivity.onCreate(MainActivity.java:17) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at android.app.Activity.performCreate(Activity.java:5244) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082) 
01-04 19:49:15.433: E/AndroidRuntime(16540): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034) 
01-04 19:49:15.433: E/AndroidRuntime(16540): ... 11 more 

如果Facebook在AndroidManifest.xml中檢查的applicationID值,那麼什麼是正確的語法?我有這個作爲我的元數據線:

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

以此作爲自己的價值觀字符串:

<string name="app_id">###############</string> 

目前全我的AndroidManifest.xml看起來是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<manifest package="com.pressx.thedevice" android:versionCode="1" android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="19" /> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > 
     <meta-data android:name="ApplicationId" android:value="@string/app_id"/> 
     <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id" /> 
     <activity android:name="com.facebook.LoginActivity"> 
     </activity> 
     <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="landscape" android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      </activity> 
    </application> 
</manifest> 

和我full values.xml如下所示:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="app_name">The Device</string> 
    <string name="app_id">###############</string> 
</resources> 

任何人都有解決這個問題的辦法嗎?你需要更多的信息,比如我的項目設置或類似的東西?

回答

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

必須在<application />範圍,而不是<activity />範圍進行聲明。移動標籤的活動外,像這樣:

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > 
<!-- Note new location --> 
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id" /> 
<meta-data android:name="ApplicationId" android:value="@string/app_id"/> 
    <activity android:name="com.facebook.LoginActivity"></activity> 
    <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="landscape" android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application>