Facebook android sdk登录按钮没有片段

时间:2015-06-08 03:33:23

标签: java android facebook facebook-login facebook-android-sdk

我在Android Studio中的一个没有任何片段的项目中工作。我继续在loginButton上获得NullPointerException,即使在使用以下行分配它之后:

            loginButton = (LoginButton) findViewById(R.id.login_button);

MainActivity.java的相关部分:

public class MainActivity extends ActionBarActivity {
    LoginButton loginButton;
    CallbackManager callbackManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
        loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.setReadPermissions("user_friends");
        loginButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

            }
        });
        setContentView(R.layout.activity_main);
        // 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
            }
        });
    }

和activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="0dp"
    tools:context=".MainActivity">        

    <com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="30dp" />
</RelativeLayout>

我无法弄清楚为什么loginbutton在该行之后仍然为null,我不知道如何解决这个问题。如果有人可以帮助我设置一个与Android Studio兼容的Facebook登录项目,即使它使用片段也会很棒。我没有任何反对片段,但我是Android新手所以我决定不使用片段因为我不完全理解它们。我查看了Facebook的示例项目,但是我找不到Android Studio项目文件,并且无法使用各自的示例文件设置项目。

4 个答案:

答案 0 :(得分:2)

在分配 loginButton 之前,尝试将 setContentView()移动到任何位置。像这样:

public class MainActivity extends ActionBarActivity {
    LoginButton loginButton;
    CallbackManager callbackManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //right here
        setContentView(R.layout.activity_main);

        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
        loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.setReadPermissions("user_friends");
        loginButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

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

答案 1 :(得分:2)

您还可以使用以下适用于我的代码,同时使用Facebook SDK 4.7

facebook login android

答案 2 :(得分:1)

您的观点(登录按钮)必须在setContentView(R.layout.activity_main);之后初始化,因此您需要移动

callbackManager = CallbackManager.Factory.create();
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions("user_friends");
loginButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

        }
});
setContentView(R.layout.activity_main);

之后

注意: FB SDK应该在setContentView()

之前初始化

答案 3 :(得分:0)

这将产生空指针错误。 所以你需要做的就是首先初始化facebookSDK,然后是setContentView,然后设置callBackManager。