使用Facebook的SDK 4.1.2问题创造登录按钮 [英] Issues creating login button using Facebook SDK 4.1.2

查看:324
本文介绍了使用Facebook的SDK 4.1.2问题创造登录按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图创建一个应用程序,这将允许用户通过他们的Facebook账户登录。我想通过Eclipse中使用新的Facebook SDK 4.1.2。在Eclipse中使用新的SDK,我也跟着<一个href=\"http://stackoverflow.com/questions/29379890/android-facebook-sdk-4-in-eclipse/29400310#29400310\">this教程。我现在可以删除所有来自Facebook的SDK中的错误,而在日食。然后,我开始以下这些步骤为了整合FB 的中使用新的SDK示例应用程序。

I am trying to create an application, which will allow users to sign in via their Facebook accounts. I wanted to use the new Facebook SDK 4.1.2 via eclipse. To use the new SDK in eclipse, I followed this tutorial. I am now able to remove all the errors from the facebook SDK without in eclipse. Then, I started following these steps in order to integrate FB in a sample application using the new SDK.

我已开始进行这样的:

在MainActivity

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.facebook.CallbackManager;
import com.facebook.FacebookSdk;

public class MainActivity extends FragmentActivity {


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

        FacebookSdk.sdkInitialize(getApplicationContext());
        if (savedInstanceState == null) {
            getFragmentManager()
                    .beginTransaction()
                    .add(R.id.fragmentParentViewGroup, new FacebookFragment())
                    .commit();
        }
    }




}

activity_main.xml中:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:id="@+id/fragmentParentViewGroup"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             tools:context=".MyActivity"
             tools:ignore="MergeRootFrame" />

的FacebookFragment:

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

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 FacebookFragment extends Fragment{
    CallbackManager callbackManager;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parentViewGroup,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.facebook_fragment, parentViewGroup, false);
        FacebookSdk.sdkInitialize(getActivity());
        callbackManager = CallbackManager.Factory.create();
        LoginButton loginButton = (LoginButton) rootView.findViewById(R.id.login_button);
        loginButton.setReadPermissions("user_friends");
        // If using in a fragment
       // loginButton.setFragment(this);    
     // Callback registration
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                // App code
            }

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

            @Override
            public void onError(FacebookException exception) {
                // App code
            }
        });    
        return rootView;
    }
}

的facebook_fragment.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:background="#FFFFFF">

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

    </RelativeLayout>

清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.facbooksdk4test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.facbooksdk4test.MainActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

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

        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    </application>

</manifest>

做上述所有我仍然得到初始化错误后。该报告logcat中:

After doing all the above I am still getting initialization errors. The logcat report:

06-01 15:23:41.670: E/AndroidRuntime(23571): FATAL EXCEPTION: main
06-01 15:23:41.670: E/AndroidRuntime(23571): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.facbooksdk4test/com.facbooksdk4test.MainActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class com.facebook.login.widget.LoginButton
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2252)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2306)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.ActivityThread.access$700(ActivityThread.java:153)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1286)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.os.Looper.loop(Looper.java:176)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.ActivityThread.main(ActivityThread.java:5302)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at java.lang.reflect.Method.invokeNative(Native Method)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at java.lang.reflect.Method.invoke(Method.java:511)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at dalvik.system.NativeStart.main(Native Method)
06-01 15:23:41.670: E/AndroidRuntime(23571): Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class com.facebook.login.widget.LoginButton
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.view.LayoutInflater.createView(LayoutInflater.java:619)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:693)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at com.facbooksdk4test.FacebookFragment.onCreateView(FacebookFragment.java:22)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.Fragment.performCreateView(Fragment.java:1699)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.BackStackRecord.run(BackStackRecord.java:682)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1455)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.Activity.performStart(Activity.java:5335)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2224)
06-01 15:23:41.670: E/AndroidRuntime(23571):    ... 11 more
06-01 15:23:41.670: E/AndroidRuntime(23571): Caused by: java.lang.reflect.InvocationTargetException
06-01 15:23:41.670: E/AndroidRuntime(23571):    at java.lang.reflect.Constructor.constructNative(Native Method)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at android.view.LayoutInflater.createView(LayoutInflater.java:593)
06-01 15:23:41.670: E/AndroidRuntime(23571):    ... 24 more
06-01 15:23:41.670: E/AndroidRuntime(23571): Caused by: java.lang.NoClassDefFoundError: com.facebook.R$styleable
06-01 15:23:41.670: E/AndroidRuntime(23571):    at com.facebook.login.widget.LoginButton.parseLoginButtonAttributes(LoginButton.java:607)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at com.facebook.login.widget.LoginButton.configureButton(LoginButton.java:571)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at com.facebook.FacebookButtonBase.<init>(FacebookButtonBase.java:66)
06-01 15:23:41.670: E/AndroidRuntime(23571):    at com.facebook.login.widget.LoginButton.<init>(LoginButton.java:209)
06-01 15:23:41.670: E/AndroidRuntime(23571):    ... 27 more

我不知道我要去的地方错了,还是应该做些什么来解决这个问题。请建议我有什么工作要做,以解决相同的。

I am not sure where I am going wrong, or what should be done to fix the issues. Please suggest me what is to be done to fix the same.

推荐答案

我没有在code 的onActivityResult 办法看到的。它需要适当的SDK的工作流程。

I don't see in your code onActivityResult method. It is required for properly SDK workflow.

您需要将其添加到在MainActivity:

You need to add it to the MainActivity:

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

原因:

这是你的FacebookSDK整合的每个活动和片段
  登录或分享转发应该到的onActivityResult的callbackManager。

Every activity and fragment that you integrate with the FacebookSDK Login or Share should forward onActivityResult to the callbackManager.

您可以在文档中这里找到它。

You can find it in documentation here.

这篇关于使用Facebook的SDK 4.1.2问题创造登录按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆