Facebook登录空指针异常的android [英] facebook login null pointer exception android
问题描述
我搜索了很多通过计算器,但我无法找到解决我的问题的答案。因此,我张贴这一点。
I searched a lot through stackoverflow but I couldn't find an answer that resolves my issue. Hence I am posting this.
我有一个样本Android应用程序中,我试图使用Facebook登录。下面是我遵循的步骤:
I have a sample Android App in which I'm trying to use facebook Login. Here are the steps that I followed:
环境:Android的工作室
Android的SDK版本:22
Facebook的SDK:4.0
Environment: Android studio Android SDK version : 22 Facebook SDK : 4.0
按照步骤在模拟器上安装APK FB,所产生的开发散列键,并在APP->设置更新它。
我的Android清单有以下code
Followed the steps to install FB APK on the emulator, generated the Developer hash key and updated it in app-> settings. My android manifest has these code
<uses-permission android:name="android.permission.INTERNET"/>
<activity android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" />
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
在我activity_main.xml中布局文件,我有这块code的
In my activity_main.xml layout file, I have this piece of code
<com.facebook.login.widget.LoginButton
android:id="@+id/fblogin_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:layout_marginBottom="30dp" />
终于在我的主要活动我有这个
And finally in my main Activity I have this
public class MainActivity extends Activity {
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.fblogin_button);
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getApplicationContext(),"Fb Login Success",Toast.LENGTH_LONG);
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(),"Fb on cancel",Toast.LENGTH_LONG);
}
@Override
public void onError(FacebookException e) {
Toast.makeText(getApplicationContext(),"Fb Login Error",Toast.LENGTH_LONG);
}
});
setContentView(R.layout.activity_main);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
Log.d("Inside Fb login","on Activiry result");
callbackManager.onActivityResult(requestCode, resultCode, data);
}}
我得到一个空指针异常如下图所示。
I am getting a null pointer exception as shown below
java.lang.RuntimeException: Unable to start activity componentInfo{PROJECT.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.login.widget.LoginButton.registerCallback(com.facebook.CallbackManager, com.facebook.FacebookCallback)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
我缺少的是在这里吗?
What am I missing here ?
推荐答案
看起来像你得到一个 NullPointerException异常
,因为你调用 findViewById ()
你打电话之前的setContentView()
,所以 loginButton
为空当你调用 loginButton.registerCallback()
。
Looks like you're getting a NullPointerException
because you're calling findViewById()
before you call setContentView()
, so loginButton
is null when you call loginButton.registerCallback()
.
只是移动调用的setContentView()
顶端
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.activity_main); //Moved up here to resolve NPE
callbackManager = CallbackManager.Factory.create();
loginButton = (LoginButton) findViewById(R.id.fblogin_button);
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getApplicationContext(),"Fb Login Success",Toast.LENGTH_LONG);
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(),"Fb on cancel",Toast.LENGTH_LONG);
}
@Override
public void onError(FacebookException e) {
Toast.makeText(getApplicationContext(),"Fb Login Error",Toast.LENGTH_LONG);
}
});
}
这篇关于Facebook登录空指针异常的android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!