我在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项目文件,并且无法使用各自的示例文件设置项目。
答案 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
答案 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。