有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无碎片的java Facebook 安卓 sdk登录按钮

我在安卓工作室的一个项目中工作,没有任何片段。我一直在loginButton上得到一个NullPointerException,即使在分配了一行之后:

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

主要活动的相关部分。爪哇:

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

还有活动。xml:

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

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

我不明白为什么loginbutton在那一行之后仍然是空的,我也不知道如何解决这个问题。如果有人能帮我建立一个使用Android Studio的Facebook登录的项目,那就太好了,即使它使用了片段。我不反对碎片,但我对Android是新手,所以我决定不使用碎片,因为我不完全理解它们。我查看了Facebook的示例项目,但找不到Android Studio项目文件,并且一直未能使用他们的单个示例文件设置项目


共 (4) 个答案

  1. # 1 楼答案

    在使用Facebook SDK 4.7时,您也可以使用以下代码,这对我来说很有用

    facebook login android

  2. # 2 楼答案

    这将产生一个空指针错误。 因此,您只需先初始化facebookSDK,然后设置ContentView,然后设置callBackManager

  3. # 3 楼答案

    视图(登录按钮)必须在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()之前初始化

  4. # 4 楼答案

    在分配登录按钮之前,尝试将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
            }
        });
    }