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<LoginResult>
类中定义的 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的主要内容,如果未能解决你的问题,请参考以下文章
无法按照 Google“入门”页面中的说明在 Android Studio 中添加地图; Android Studio 报错
android studio application怎么创建