Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java facebook注销时应用程序崩溃,NullPointerException_Java_Android_Facebook - Fatal编程技术网

Java facebook注销时应用程序崩溃,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() {

我的主活动中有一个方法,允许用户在登录时注销,在用户注销时登录。但是当我调用FacebookSDK的.logout方法时,应用程序崩溃了。 我的代码错误来自哪里 Logcat在fb.logoutMainActivity.this处返回NULLPOINTEREXCEPTION错误

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: