Facebook SDK 4在Android Studio ExceptionInitializeError登录v2.3

时间:2015-03-26 15:59:27

标签: android facebook android-studio facebook-android-sdk facebook-sdk-4.0

首先,有人可以为我提供一个样本,只需连接并在登录时切换到另一个片段即可,这样我就可以看到可以理解的工作代码了。 当用户与facebook连接时,我只是试图在测试页面上放置一个Login按钮,然后片段应该改变。我尝试过那里的事情: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;
}

MainActivity:

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);
        }
    });
}

1 个答案:

答案 0 :(得分:1)

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

您可以在onSuccess()内的匿名内部FacebookCallback<LoginResult>课程中定义的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上看到替换片段的示例。