Java facebook注销时应用程序崩溃,NullPointerException
我的主活动中有一个方法,允许用户在登录时注销,在用户注销时登录。但是当我调用FacebookSDK的.logout方法时,应用程序崩溃了。 我的代码错误来自哪里 Logcat在fb.logoutMainActivity.this处返回NULLPOINTEREXCEPTION错误Java facebook注销时应用程序崩溃,NullPointerException,java,android,facebook,Java,Android,Facebook,我的主活动中有一个方法,允许用户在登录时注销,在用户注销时登录。但是当我调用FacebookSDK的.logout方法时,应用程序崩溃了。 我的代码错误来自哪里 Logcat在fb.logoutMainActivity.this处返回NULLPOINTEREXCEPTION错误 public void loginFacebook(View v) { // TODO Auto-generated method stub new Thread(new Runnable() {
public void loginFacebook(View v) {
// TODO Auto-generated method stub
new Thread(new Runnable() {
@Override
public void run() {
// log out if logged in
if (fb.isSessionValid()) {
try {
updateButtonImage();
Log.d("Session Valid", "Session Valid");
fb.logout(MainActivity.this);
if (fb.isSessionValid())
Log.d("Session Valid", "Session Valid");
else
Log.d("Session Not Valid", "Session Not Valid");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else {
// log in if logged out
Log.d("Session Not Valid", "Session Not Valid");
// login
runOnUiThread(new Runnable() {
public void run() {
fb.authorize(MainActivity.this,
new DialogListener() {
// I have deleted this part as this is not relevant to this question
});
}
});
}
}
}).start();
}
日志:
03-08 16:11:22.242: E/AndroidRuntime(11956): FATAL EXCEPTION: Thread-14
03-08 16:11:22.242: E/AndroidRuntime(11956): java.lang.NullPointerException
03-08 16:11:22.242: E/AndroidRuntime(11956): at android.webkit.CookieSyncManager.createInstance(CookieSyncManager.java:96)
03-08 16:11:22.242: E/AndroidRuntime(11956): at com.facebook.internal.Utility.clearCookiesForDomain(Utility.java:554)
03-08 16:11:22.242: E/AndroidRuntime(11956): at com.facebook.internal.Utility.clearFacebookCookies(Utility.java:578)
03-08 16:11:22.242: E/AndroidRuntime(11956): at com.facebook.Session.closeAndClearTokenInformation(Session.java:798)
03-08 16:11:22.242: E/AndroidRuntime(11956): at com.facebook.android.Facebook.logoutImpl(Facebook.java:669)
03-08 16:11:22.242: E/AndroidRuntime(11956): at com.facebook.android.Facebook.logout(Facebook.java:646)
03-08 16:11:22.242: E/AndroidRuntime(11956): at com.appquest.awaaziitkgp.MainActivity$4.run(MainActivity.java:167)
03-08 16:11:22.242: E/AndroidRuntime(11956): at java.lang.Thread.run(Thread.java:1019)
出于某种原因,Facebook对象fb在run方法中变为null。你可以试着打电话
session.closeAndClearTokenInformation();
相反,它做同样的事情。或者,您可以尝试找出fb变为空的原因。我怀疑这与您在一个单独的线程上运行它有关,我真的不认为有必要这样做。发布StackTrace之前,我在该线程中有一些代码,需要从internet加载一些数据。我拆下了线,现在它可以正常工作了。谢谢。不过,我不明白出了什么问题。我在onCreate中将fb变量初始化为fb=newfacebookapp_ID;我怀疑Facebook类的对象不是线程安全的,在这种情况下,它们不能作为类字段访问,应该在构造函数中提供给该线程。这需要在文档中进行检查。这类问题就是Android框架设计师采用单UI线程策略的一个例子,它让开发人员不用同步回调和字段就可以完成他们的工作……感谢这些信息!回答得好,y: