错误充气类com.facebook.widget.LoginButton与Facebook SDK 4.0.1错误、facebook、com、widget

2023-09-07 08:49:24 作者:浪迹天涯只为你

我知道这是一个很常见的问题,没有找到答案BTU我已经经历了所有的堆栈溢出问题阅读。

我试图用通过摇篮加入Facebook的SDK 4.0.1整合Facebook的登录按钮,但我得到了下面的错误。

 了java.lang.RuntimeException:无法启动活动ComponentInfo {se.speedle.android/com.bryderi.speedle.android.activity.MainActivity}:android.view.InflateException:二进制XML文件行#26:错误充气类com.facebook.widget.LoginButton
        在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
        在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
        在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
        在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256)
        在android.os.Handler.dispatchMessage(Handler.java:99)
        在android.os.Looper.loop(Looper.java:137)
        在android.app.ActivityThread.main(ActivityThread.java:5103)
        在java.lang.reflect.Method.invokeNative(本机方法)
        在java.lang.reflect.Method.invoke(Method.java:525)
        在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
        在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        在dalvik.system.NativeStart.main(本机方法)
 致:android.view.InflateException:二进制XML文件中的行#26:错误充气类com.facebook.widget.LoginButton
        在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
        在android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
        在android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
        在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
        在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
        在android.view.LayoutInflater.inflate(LayoutInflater.java:353)
        在android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
        在android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
        在com.bryderi.speedle.android.activity.MainActivity.onCreate(MainActivity.java:36)
        在android.app.Activity.performCreate(Activity.java:5133)
        在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
        在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:137)
在android.app.ActivityThread.main(ActivityThread.java:5103)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:525)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
在dalvik.system.NativeStart.main(本机方法)
 抛出java.lang.ClassNotFoundException:产生的原因没有在路径上找到的类com.facebook.widget.LoginButton:DexPathList [zip文件/data/app/se.speedle.android-1.apk"],nativeLibraryDirectories = [/数据/应用-LIB / se.speedle.android-1 /系统/ lib目录]
        在dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
        在java.lang.ClassLoader.loadClass(ClassLoader.java:501)
        在java.lang.ClassLoader.loadClass(ClassLoader.java:461)
        在android.view.LayoutInflater.createView(LayoutInflater.java:559)
        在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
在android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
在android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
在android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            在android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
在android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
在com.bryderi.speedle.android.activity.MainActivity.onCreate(MainActivity.java:36)
在android.app.Activity.performCreate(Activity.java:5133)
在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:137)
在android.app.ActivityThread.main(ActivityThread.java:5103)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:525)
 

我可以看到Android的Studio中的LoginButton类,所以这类型的作品

下面是我的build.gradle依赖

 相关性{

方面org.robobinding:robobinding:0.8.9
编译org.springframework.android:spring-android-rest-template:2.0.0.M1
编译com.android.support:appcompat-v7:21.0.3
编译com.android.support:support-v4:21.0.3
编译com.android.support:support-v13:21.0.3

编译com.android.support:recyclerview-v7:21.0.3
编译com.fasterxml.jackson.core:杰克逊 - 数据绑定:2.3.2
编译com.jakewharton:butterknife:6.1.0
编译com.facebook.android:facebook-android-sdk:4.0.1
编译me.alexrs:recyclerview-渲染器:1.0.3
编译com.google.android.gms:播放服务:87年6月5日
}
 
Anonymous Login 功能即将到来,用户可以匿名使用 Facebook 账号登录第三方服务

下面是我的布局

 < XML版本=1.0编码=UTF-8&GT?;
<的LinearLayout
    的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:Facebook的=htt​​p://schemas.android.com/apk/res-auto
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:重力=center_horizo​​ntal
    机器人:方向=垂直
    机器人:填充=20dp>

    < com.facebook.widget.LoginButton
        机器人:ID =@ + ID / connectWithFbButton
        风格=@风格/ com_facebook_loginview_default_style
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_centerInParent =真
        机器人:layout_gravity =center_horizo​​ntal
        机器人:文本=connect_with_facebook/>
< / LinearLayout中>
 

和我的活动中的相关部分。

  @覆盖
    保护无效的onCreate(包savedInstanceState){

        super.onCreate(savedInstanceState);

        FacebookSdk.sdkInitialize(getApplicationContext());


        callbackManager = CallbackManager.Factory.create();


        的setContentView(R.layout.activity_main);

        //设置工具栏更换动作条。
        工具条工具栏=(栏)findViewById(R.id.toolbar);
        setSupportActionBar(工具栏);

        //寻找我们的抽屉观点
        dlDrawer =(FragmentNavigationDrawer)findViewById(R.id.drawer_layout);
        //设置抽屉查看
        dlDrawer.setupDrawerConfiguration((ListView控件)findViewById(R.id.lvDrawer),工具栏,
                R.layout.drawer_nav_item,R.id.flContent);
        //添加导航项目
        dlDrawer.addNavItem(家,第一块碎片,ClassifiedsFragment.class);
        dlDrawer.addNavItem(我的最爱,我的最爱,ClassifiedsFragment.class);
        dlDrawer.addNavItem(我的物品,项,ClassifiedsFragment.class);
        dlDrawer.addNavItem(设置,设置,ClassifiedsFragment.class);


        //dlDrawer.addNavItem("Second,第二块碎片,SecondFragment.class);
        //dlDrawer.addNavItem("Third,第三块碎片,ThirdFragment.class);
        //选择默认
        如果(savedInstanceState == NULL){
            dlDrawer.selectDrawerItem(0);
        }
    }
 

解决方案

在Facebook的SDK 4.0.1, LoginButton 类不是在融为一体。 facebook.widget 包。这是 com.facebook.login.widget 包内。所以,你的XML声明应该是这样的:

 < com.facebook.login.widget.LoginButton
    机器人:ID =@ + ID / connectWithFbButton
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_centerInParent =真
    机器人:layout_gravity =center_horizo​​ntal
    机器人:文本=connect_with_facebook/>
 

I know this is a very common question, btu I have read through all the stack overflow questions without finding an answer.

I'm trying to integrate the Facebook Login Button using Facebook SDK 4.0.1 added through Gradle, but I get the following error.

  java.lang.RuntimeException: Unable to start activity ComponentInfo{se.speedle.android/com.bryderi.speedle.android.activity.MainActivity}: android.view.InflateException: Binary XML file line #26: Error inflating class com.facebook.widget.LoginButton
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
        at android.app.ActivityThread.access$600(ActivityThread.java:141)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5103)
        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:737)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.view.InflateException: Binary XML file line #26: Error inflating class com.facebook.widget.LoginButton
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
        at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
        at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
        at com.bryderi.speedle.android.activity.MainActivity.onCreate(MainActivity.java:36)
        at android.app.Activity.performCreate(Activity.java:5133)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            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:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.facebook.widget.LoginButton" on path: DexPathList[[zip file "/data/app/se.speedle.android-1.apk"],nativeLibraryDirectories=[/data/app-lib/se.speedle.android-1, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
        at android.view.LayoutInflater.createView(LayoutInflater.java:559)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
            at com.bryderi.speedle.android.activity.MainActivity.onCreate(MainActivity.java:36)
            at android.app.Activity.performCreate(Activity.java:5133)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)

I can see the LoginButton class in Android Studio, so it kind of works

Here's my build.gradle dependencies

dependencies {

aspects 'org.robobinding:robobinding:0.8.9'
compile 'org.springframework.android:spring-android-rest-template:2.0.0.M1'
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:support-v4:21.0.3'
compile 'com.android.support:support-v13:21.0.3'

compile 'com.android.support:recyclerview-v7:21.0.3'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.2'
compile 'com.jakewharton:butterknife:6.1.0'
compile 'com.facebook.android:facebook-android-sdk:4.0.1'
compile 'me.alexrs:recyclerview-renderers:1.0.3'
compile 'com.google.android.gms:play-services:6.5.87'
}

Here's my layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:facebook="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="20dp" >

    <com.facebook.widget.LoginButton
        android:id="@+id/connectWithFbButton"
        style="@style/com_facebook_loginview_default_style"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_gravity="center_horizontal"
        android:text="  connect_with_facebook"/>
</LinearLayout>

And the relevant parts of my activity

@Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        FacebookSdk.sdkInitialize(getApplicationContext());


        callbackManager = CallbackManager.Factory.create();


        setContentView(R.layout.activity_main);

        // Set a Toolbar to replace the ActionBar.
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        // Find our drawer view
        dlDrawer = (FragmentNavigationDrawer) findViewById(R.id.drawer_layout);
        // Setup drawer view
        dlDrawer.setupDrawerConfiguration((ListView) findViewById(R.id.lvDrawer), toolbar,
                R.layout.drawer_nav_item, R.id.flContent);
        // Add nav items
        dlDrawer.addNavItem("Home", "First Fragment", ClassifiedsFragment.class);
        dlDrawer.addNavItem("Favourites", "Favourites", ClassifiedsFragment.class);
        dlDrawer.addNavItem("My Items", "Items", ClassifiedsFragment.class);
        dlDrawer.addNavItem("Settings", "Settings", ClassifiedsFragment.class);


        //dlDrawer.addNavItem("Second", "Second Fragment", SecondFragment.class);
        //dlDrawer.addNavItem("Third", "Third Fragment", ThirdFragment.class);
        // Select default
        if (savedInstanceState == null) {
            dlDrawer.selectDrawerItem(0);
        }
    }

解决方案

In facebook sdk 4.0.1, LoginButton class is not inside com.facebook.widget package. It is inside com.facebook.login.widget package. So your xml declaration should look like this:

  <com.facebook.login.widget.LoginButton
    android:id="@+id/connectWithFbButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:layout_gravity="center_horizontal"
    android:text="  connect_with_facebook" />