0

I have integrated the Facebook in my application which works well while logging in, but when I try to logout I get many errors which I couldn't resolve. There were similar questions asked in stack overflow (Facebook Log Out error in Android, Can't create handler inside thread which has not called Looper.prepare()), but solution for that posts didn't workout for me. Here is my code:

public class Main extends Activity {
    DrawerLayout drawerlayout;
    ListView LVdrawer;
    ImageView toplogo;
    View rL;
    Facebook fb;
    Handler handler;

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.navigation_drawer);
        rL = findViewById(R.id.toplogoaction);
        handler=new Handler();
            drawerlayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        LVdrawer = (ListView) findViewById(R.id.left_drawer);
        LVdrawer.setAdapter(new CustomAdapter(this, 0));
        fb=new Facebook(getString(R.string.APP_ID));
            get();
        LVdrawer.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                                TextView ttt = (TextView) view.findViewById(R.id.detail);
                String s = (String) ttt.getText();
                drawerlayout.closeDrawers();

                switch (s) {
                case "Now":
                    if(fb.isSessionValid()){

                        Runnable runnable=new Runnable() {

                            @Override
                            public void run() {
                                handler.post(new Runnable() {

                                    @Override
                                    public void run() {
                                        // TODO Auto-generated method stub
                                        try {
                                            Toast.makeText(getApplicationContext(), "Loggedout",    Toast.LENGTH_SHORT).show();
                                            fb.logout(getApplicationContext());
                                        } catch (MalformedURLException e) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                        } catch (IOException e) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                        }
                                    }
                                });
                                // TODO Auto-generated method stub


                            }
                        };

                            new Thread(runnable).start();
                                }
                    break;

                }
            }
        });
    }


    @SuppressWarnings("deprecation")
    private void get() {
        SharedPreferences Logininfo = getSharedPreferences("accesstoken", MODE_PRIVATE);
        if (Logininfo.getString("access_token", null) != null) {
            fb.setAccessToken(Logininfo.getString("access_token", null));
            if (Logininfo.getLong("access_expires", 0) != 0)
                fb.setAccessExpires(Logininfo.getLong("access_expires", 0));
        }

    }


 }

Logcat:

09-15 16:16:40.138: D/Facebook-Util(9594): GET URL: https://api.facebook.com/restserver.php?access_token=CAAMKZCWmSwAABAC5ZB3hbry1FLMNdsKssmaS1OpiUxCK9ZAnn3OCKclKNAJ0DTVaf5M6d9QREeTZAsJWKNFWrt65vH5STZBeW0dL9A1l59xSuuqh1RmZALDgFLIxZBiEsXTGE4bR1pkEFQZBA8DfK81ZAjbe1V34JBddgrr0UxKOYkNDqEJc1WWZB8H9TZCbMZCpZCEk6ESusNzxBldzpVKHZBnNNr&format=json&method=auth.expireSession
09-15 16:16:40.211: D/AndroidRuntime(9594): Shutting down VM
09-15 16:16:40.211: W/dalvikvm(9594): threadid=1: thread exiting with uncaught exception (group=0x415ecd40)
09-15 16:16:40.217: E/AndroidRuntime(9594): FATAL EXCEPTION: main
09-15 16:16:40.217: E/AndroidRuntime(9594): Process: com.example.apeonomy, PID: 9594
09-15 16:16:40.217: E/AndroidRuntime(9594): android.os.NetworkOnMainThreadException
09-15 16:16:40.217: E/AndroidRuntime(9594):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at java.net.InetAddress.getAllByName(InetAddress.java:214)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.facebook.android.Util.openUrl(Util.java:224)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.facebook.android.Facebook.requestImpl(Facebook.java:804)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.facebook.android.Facebook.request(Facebook.java:707)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.facebook.android.Facebook.logoutImpl(Facebook.java:649)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.facebook.android.Facebook.logout(Facebook.java:642)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.digiapes.apeonomy.Main$1$1$1.run(Main.java:92)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at android.os.Handler.handleCallback(Handler.java:733)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at android.os.Handler.dispatchMessage(Handler.java:95)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at android.os.Looper.loop(Looper.java:136)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at android.app.ActivityThread.main(ActivityThread.java:5086)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at java.lang.reflect.Method.invokeNative(Native Method)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at java.lang.reflect.Method.invoke(Method.java:515)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
09-15 16:16:40.217: E/AndroidRuntime(9594):     at dalvik.system.NativeStart.main(Native Method)
09-15 16:16:46.330: I/Process(9594): Sending signal. PID: 9594 SIG: 9

Updated(Logcat) after using AsyncTask:

09-15 16:42:11.022: D/Facebook-Util(14618): GET URL: https://api.facebook.com/restserver.php?access_token=CAAMKZCWmSwAABAC5ZB3hbry1FLMNdsKssmaS1OpiUxCK9ZAnn3OCKclKNAJ0DTVaf5M6d9QREeTZAsJWKNFWrt65vH5STZBeW0dL9A1l59xSuuqh1RmZALDgFLIxZBiEsXTGE4bR1pkEFQZBA8DfK81ZAjbe1V34JBddgrr0UxKOYkNDqEJc1WWZB8H9TZCbMZCpZCEk6ESusNzxBldzpVKHZBnNNr&format=json&method=auth.expireSession
09-15 16:42:12.626: W/dalvikvm(14618): threadid=12: thread exiting with uncaught exception (group=0x415ecd40)
09-15 16:42:12.630: E/AndroidRuntime(14618): FATAL EXCEPTION: AsyncTask #1
09-15 16:42:12.630: E/AndroidRuntime(14618): Process: com.example.apeonomy, PID: 14618
09-15 16:42:12.630: E/AndroidRuntime(14618): java.lang.RuntimeException: An error occured while executing doInBackground()
09-15 16:42:12.630: E/AndroidRuntime(14618):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at java.lang.Thread.run(Thread.java:841)
09-15 16:42:12.630: E/AndroidRuntime(14618): Caused by: java.lang.IllegalArgumentException: Invalid context argument
09-15 16:42:12.630: E/AndroidRuntime(14618):    at android.webkit.CookieSyncManager.createInstance(CookieSyncManager.java:90)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at com.facebook.internal.Utility.clearCookiesForDomain(Utility.java:324)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at com.facebook.internal.Utility.clearFacebookCookies(Utility.java:348)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at com.facebook.Session.closeAndClearTokenInformation(Session.java:801)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at com.facebook.android.Facebook.logoutImpl(Facebook.java:665)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at com.facebook.android.Facebook.logout(Facebook.java:642)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at com.digiapes.apeonomy.Main$myAsy.doInBackground(Main.java:164)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at com.digiapes.apeonomy.Main$myAsy.doInBackground(Main.java:1)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
09-15 16:42:12.630: E/AndroidRuntime(14618):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
09-15 16:42:12.630: E/AndroidRuntime(14618):    ... 4 more
Community
  • 1
  • 1
Harsha
  • 659
  • 10
  • 23

1 Answers1

0

Create This Class in your FacebookSDK in com.facebook package

package com.facebook;

import android.content.Context;

public class Door {
  public static void initializeStaticContext(Context context) {
    Session.initializeStaticContext(context);
  }
}

call Door.initializeStaticContext(this.getApplicationContext()); before calling logout

Divyang Panchal
  • 1,889
  • 1
  • 19
  • 27