2013-03-19 75 views
15

我已經使用3.0文檔中的步驟構建了Facebook集成。當我使用Eclispe將應用程序部署到手機時,它工作正常;但是,當我導出應用程序以將其上傳到商店並側載apk時,它會失敗並顯示以下錯誤。當我將其導出時,SDK就在那裏並加載。任何線索我要去哪裏錯了?錯誤膨脹類com.facebook.widget.LoginButton

03-18 21:01:02.089: E/AndroidRuntime(14834): FATAL EXCEPTION: main 
03-18 21:01:02.089: E/AndroidRuntime(14834): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.telvista.facebooksupport/com.telvista.facebooksupport.SplashActivity}: android.view.InflateException: Binary XML file line #51: Error inflating class com.facebook.widget.LoginButton 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2088) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread.access$700(ActivityThread.java:139) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.os.Looper.loop(Looper.java:137) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread.main(ActivityThread.java:4918) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at java.lang.reflect.Method.invokeNative(Native Method) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at java.lang.reflect.Method.invoke(Method.java:511) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at dalvik.system.NativeStart.main(Native Method) 
03-18 21:01:02.089: E/AndroidRuntime(14834): Caused by: android.view.InflateException: Binary XML file line #51: Error inflating class com.facebook.widget.LoginButton 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.createView(LayoutInflater.java:613) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:306) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.Activity.setContentView(Activity.java:1901) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at com.telvista.facebooksupport.SplashActivity.onCreate(SplashActivity.java:29) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.Activity.performCreate(Activity.java:5048) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2052) 
03-18 21:01:02.089: E/AndroidRuntime(14834): ... 11 more 
03-18 21:01:02.089: E/AndroidRuntime(14834): Caused by: java.lang.reflect.InvocationTargetException 
03-18 21:01:02.089: E/AndroidRuntime(14834): at java.lang.reflect.Constructor.constructNative(Native Method) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
03-18 21:01:02.089: E/AndroidRuntime(14834): ... 23 more 
03-18 21:01:02.089: E/AndroidRuntime(14834): Caused by: java.lang.NoClassDefFoundError: com.facebook.android.R$color 
03-18 21:01:02.089: E/AndroidRuntime(14834): at com.facebook.widget.LoginButton.<init>(LoginButton.java:204) 
03-18 21:01:02.089: E/AndroidRuntime(14834): ... 26 more 

這裏是清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.t.facebooksupport" 
    android:versionCode="21" 
    android:versionName="2.1" > 

    <uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="17" /> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <application 
    android:allowBackup="false" 
    android:icon="@drawable/t_logo" 
    android:label="@string/app_name"> 

    <activity 
     android:theme="@android:style/Theme.NoTitleBar" 
     android:name="com.t.facebooksupport.SplashActivity" 
     android:icon="@drawable/t_logo" 
     android:label="@string/app_name" > 
     <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.t.facebooksupport.MainActivity"> 
    </activity> 
    <activity 
     android:name="com.t.facebooksupport.ViewPost"> 
    </activity> 
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> 
    <activity android:label="@string/app_name" android:name="com.facebook.LoginActivity"></activity> 

    </application> 

</manifest> 

飛濺頁面登錄按鈕:

package com.t.facebooksupport; 

import java.util.Arrays; 
import java.util.Map; 

import com.facebook.Request; 
import com.facebook.Response; 
import com.facebook.Session; 
import com.facebook.SessionState; 
import com.facebook.UiLifecycleHelper; 
import com.facebook.model.GraphUser; 
import com.facebook.widget.LoginButton; 
import com.t.facebooksupport.helper.PostConstants; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.util.Log; 

public class SplashActivity extends Activity { 

    private UiLifecycleHelper uiHelper; 
    private boolean isResumed = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 

     uiHelper = new UiLifecycleHelper(this, callback); 
     Session session = Session.getActiveSession(); 

     if (session != null && session.isOpened()) { 
      startActivity(new Intent(SplashActivity.this, MainActivity.class)); 
     } 
     LoginButton authButton = (LoginButton) findViewById(R.id.login_button); 
     authButton.setReadPermissions(Arrays.asList("email")); 

    } 

    private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
     if (isResumed) { 
      if (state.isOpened()) { 
       Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

        @Override 
        public void onCompleted(GraphUser user, Response response) { 
         if (user != null) { 
          // Display the parsed user info 
          SharedPreferences settings = getSharedPreferences(PostConstants.PREFS_NAME, Activity.MODE_PRIVATE); 
          SharedPreferences.Editor editor = settings.edit(); 
          editor.putString("fb_id", user.getId()); 
          editor.putString("fullname", user.getFirstName() + " " + user.getLastName()); 
          editor.putString("firstname", user.getFirstName()); 
          editor.putString("lastname", user.getLastName()); 
          editor.putString("image_loc", "https://graph.facebook.com/" + user.getId() + "/picture?type=large"); 
          editor.putString("user_id", user.asMap().get("email").toString()); 
          editor.putString("email", user.asMap().get("email").toString()); 
          editor.putString("page", "1"); 
          editor.putString("count", "30"); 
          editor.putString("token", ""); 
          editor.commit(); 

          startActivity(new Intent(SplashActivity.this, MainActivity.class)); 
         } 
        } 
       }); 
      } else if (state.isClosed()) { 
      } 
     } 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     uiHelper.onResume(); 
     isResumed = true; 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     uiHelper.onPause(); 
     isResumed = false; 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     uiHelper.onActivityResult(requestCode, resultCode, data); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     uiHelper.onDestroy(); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     uiHelper.onSaveInstanceState(outState); 
    } 

    private Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, Exception exception) { 
      onSessionStateChange(session, state, exception); 
     } 
    }; 

} 

編輯:---------------- -------------------------------

這是我曾嘗試過的:

  1. 嘗試清理我的項目和FacebookSDK約50倍。
  2. 刪除了FacebookSDK並重新閱讀了3次。

我已經嘗試了一切,我可以在互聯網上找到,並不能找出問題是什麼。

+0

嘗試下載SDK – Darussian 2013-03-19 13:28:38

+0

的新的zip我試過幾次。 – 2013-03-19 15:30:40

+0

我也遇到了這個錯誤,但是使用HelloFacebookSample活動! – 2013-06-23 19:57:49

回答

1

我發現解決這個問題的唯一方法是將整個SDK放到我的項目中。現在它可以工作。不是首選的解決方案,但它的工作原理。

+0

這是做到這一點的唯一方法......沒有整個SDK,它不知道是指什麼顏色 – Darussian 2013-03-19 17:29:02

+0

如何做到這一點?將facebooksdk.jar放在lib文件夾中,但我仍然得到相同的錯誤 – 2013-03-22 01:51:30

+0

我確定了錯誤,這是因爲類組件的路由不正確。爲了得到一個解決方案,我重寫了我的課程的路徑(然後ADT變得愚蠢,我不得不重新開始)並完成。 – 2013-03-22 02:43:56

0

一個解決方案是將Facebook SDK的路徑添加到項目中的「project.properties」。

像:

android.library.reference.1=../libfacebook/facebook-android-sdk-3.0.1/facebook 
1

我甚至有同樣的錯誤,當我試圖在模擬器中運行它。

我的問題更相關,我添加Facebook的Sdk的構建路徑,而不是在屬性選項卡中添加項目。我從another stackoverflow answer

4

得到了答案我有同樣的錯誤,我只是清理我的項目(facebook sdk和當前項目),並得到解決。

0

我也有同樣的錯誤,只是通過android-support-v13.jar解決了android-support-v4.jar問題。

0

以防萬一..如果有人仍然需要它,只清理Facebook項目,然後將其作爲庫添加回您的項目中。這解決了我的問題

3

添加Facebook的,你必須將它添加到您的搖籃依賴模塊後,加入下一行到依賴塊:

compile project(':facebook') 

我希望它可以幫助。

11

如果您使用的是Facebook SDK 4.x,請注意包名稱已更改。它現在是com.facebook.login.widget.LoginButton

1

剛初始化FacebookSdk.sdkInitialize(getApplicationContext());在你的Application類中。因爲即使在您的活動被初始化之前,Application類也會初始化。

做就像這樣:

公共類ApplicationController的擴展應用{

@Override 
public void onCreate() { 
    super.onCreate(); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
} 

}

53

FacebookSdk.sdkInitialize(getApplicationContext());

此的setContentView

之前
setContentView(R.layout.activity_home); 
+0

太好了。謝謝。 – Ferrrmolina 2016-04-15 19:32:43

+0

完美解決方案 – JAF 2016-05-24 03:26:10

+0

這是完美答案在setcontentView之前初始化sdk。 – Vishal 2016-06-15 07:42:31

5

我得到這個錯誤,因爲我設置了內容視圖之前sdkInitialize。入門指南有一個評論指的是這個。

https://developers.facebook.com/docs/android/getting-started#androidstudio

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
    // Initialize the SDK before executing any other operations, 
    // especially, if you're using Facebook UI elements. 
} 

所以我的代碼現在看起來像這樣:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
    setContentView(R.layout.activity_main); 
} 
0

我試圖通過編程編程就像

LoginButton loginButton = new LoginButton(this); 

創造LoginButton實例,並添加到了一個的LinearLayout

fbLoginButton = (LinearLayout) findViewById(R.id.fb_login_view); 
    fbLoginButton.addView(loginButton); 

這裏是這是ofcourse繼@Lalit Kumar's answer 建議的編輯讓我知道如果我錯過什麼了我的佈局XML

<LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="40dip" 
      android:id="@+id/fb_login_view" 
      android:layout_centerInParent="true" 
      android:layout_gravity="center_horizontal" 
      android:text="connect_with_facebook"/> 

的一瞥。

0

如果您將Facebook庫添加到Properties-> Android的應用程序中,則應該在您的facebooksdk路徑/ bin/facebook.jar中刪除facebook.jar。在eclipse中鏈接時會導致錯誤。然後你清理你的Facebook SDK和你的應用程序。我希望能正常工作。

4

你的setContentView前初始化的Facebook SDK,所以添加以下行權的setContentView上述

FacebookSdk.sdkInitialize(getApplicationContext()); 
+0

我已經忘記了這一點。幫助過我! :-) – 2016-07-04 12:07:21

+0

幫助我如此+1 – TapanHP 2016-11-11 06:29:04

相關問題