Android Studio 中的 Facebook SDK 4 ExceptionInitializeError Login v2.3

Posted

技术标签:

【中文标题】Android Studio 中的 Facebook SDK 4 ExceptionInitializeError Login v2.3【英文标题】:Facebook SDK 4 in Android Studio ExceptionInitializeError Login v2.3 【发布时间】:2015-03-26 15:59:27 【问题描述】:

首先,最重要的是,有人可以为我提供一个示例,该示例可以在登录时连接并切换到另一个片段,这将非常棒,因此我将拥有可以查看的工作代码以理解。 当用户与 facebook 连接时,我只是想在测试页面上放置一个登录按钮,然后片段应该改变。我尝试了那里的东西:https://developers.facebook.com/docs/facebook-login/android/v2.3 但我无法让它工作,也不太明白发生了什么......所以我迷路了。我有一个带有以下代码的ExceptionInitializeError。但我怀疑它是否正确。

我的登录片段:

public View onCreateView(
        LayoutInflater inflater,
        ViewGroup container,
        Bundle savedInstanceState) 
    View view = inflater.inflate(R.layout.login_frag, container, false);

    loginButton = (LoginButton) view.findViewById(R.id.login_button);
    loginButton.setFragment(this);

    // Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() 
        @Override
        public void onSuccess(LoginResult loginResult) 
            Toast.makeText(getActivity(),"Success",Toast.LENGTH_SHORT).show();
        

        @Override
        public void onCancel() 
            Toast.makeText(getActivity(),"fail",Toast.LENGTH_SHORT).show();
        

        @Override
        public void onError(FacebookException exception) 
            Toast.makeText(getActivity(),"error",Toast.LENGTH_SHORT).show();
        
    );
    return view;

主活动:

protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    monFragmentManager = new MonFragmentManager(getSupportFragmentManager());
    monFragmentManager.showFragment(0, false);
    FacebookSdk.sdkInitialize(getApplicationContext());
    callbackManager = CallbackManager.Factory.create();
    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() 
        @Override
        public void onSuccess(LoginResult loginResult) 
            monFragmentManager.showFragment(1,false);
        

        @Override
        public void onCancel() 
            monFragmentManager.showFragment(0,false);
        

        @Override
        public void onError(FacebookException e) 
            monFragmentManager.showFragment(0,false);
        
    );

【问题讨论】:

这是一个添加登录按钮的示例:github.com/facebook/facebook-android-sdk/tree/master/samples/… 为什么要注册两次对同一个按钮的回调? 请提供完整的错误/堆栈跟踪(您可以链接到 pastebin.com 上的粘贴),并详细说明示例代码的哪一行映射到堆栈跟踪的哪一行。 我按照幻灯片书呆子的教程修复了错误。不管怎么说,还是要谢谢你。抱歉回复晚了。 【参考方案1】:

为了替换片段,您需要获取FragmentManager 的实例。在此实例上,您调用.beginTransaction() 以获取FragmentTransaction 实例。在这个事务实例上,你可以调用.replace()。这需要两个参数:要在其中替换片段的容器的 ID,以及要在替换后显示的片段实例。最后,您需要在事务实例上调用.commit() 以使更改生效。

您可以在 onSuccess() 的匿名内部 FacebookCallback&lt;LoginResult&gt; 类中定义的 onSuccess() 方法中执行所有这些操作MainActivity

// ...
// obtain someFragmentManager instance
// obtain containerViewId instance
// ...

@Override
public void onSuccess(LoginResult loginResult) 
  someFragmentManager.beginTransaction()
    .replace(containerViewId, otherFragment)
    .commit();

您可以在this page of the Android docs 上查看替换片段的示例。

【讨论】:

我的代码中有一个片段管理器,第 4 行是我创建的一个对象,其中构造函数在参数中接受一个 FragmentManager 对象。抱歉这么晚才回答我实际上在 youtube 上从 slidenerd 找到了一个不错的教程,但我忘记了这个线程。 从您的代码看,MonFragmentManager 到底是什么并不明显,这就是为什么我的回答解释说您需要获得一个 FragmentManager 兼容类的实例。

以上是关于Android Studio 中的 Facebook SDK 4 ExceptionInitializeError Login v2.3的主要内容,如果未能解决你的问题,请参考以下文章

android studio怎样运行打包后的apk

无法按照 Google“入门”页面中的说明在 Android Studio 中添加地图; Android Studio 报错

android studio 怎么添加module

android studio application怎么创建

android - android studio中的proguard错误

Android studio 报错问题