混得注销错误从Facebook [英] getting error on logout from facebook

查看:188
本文介绍了混得注销错误从Facebook的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已创建一个应用程序在whick即时通讯登录Facebook和从Facebook,获取数据,但我的退出方法是行不通的,这是什么问题,我无法理解,在设备无论ID启动应用程序后,我填写开始总是从onle获取数据,它是没有得到注销,我无法通过其他id.please登录提示我的东西。

MainActivity

 公共类MainActivity延伸活动{
    Facebook的FB;
按钮登录,的getData,注销;
ImageView的IG;
串APP_ID;
私人AsyncFacebookRunner mAsyncRunner;
字符串文件名=AndroidSSO_data;
私人共享preferences米preFS;
    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.fragment_main);
     APP_ID =的getString(R.string.app_id);
     FB =新的Facebook(APP_ID);
        登录=(按钮)findViewById(R.id.login);
        注销=(按钮)findViewById(R.id.logout);
        的getData =(按钮)findViewById(R.id.getData);
        // IG =(ImageView的)findViewById(R.id.profile_pic);
         login.setOnClickListener(新View.OnClickListener(){                @覆盖
                公共无效的onClick(视图v){
                    loginToFacebook();
                }
            });getData.setOnClickListener(新View.OnClickListener(){    @覆盖
    公共无效的onClick(视图v){
        getProfileInformation();
    }
});
     logout.setOnClickListener(新View.OnClickListener(){@覆盖
公共无效的onClick(视图v){
    如果(fb.isSessionValid()){
        logoutFromFacebook();}
}
});
mAsyncRunner =新AsyncFacebookRunner(FB);
// updateButtonImage();    }    @燮pressWarnings(德precation)
    公共无效loginToFacebook(){         米preFS = GET preferences(MODE_PRIVATE);
         字符串的access_token = M prefs.getString(的access_token,NULL);
         长到期= M prefs.getLong(access_expires,0);         如果(ACCESS_TOKEN!= NULL){
             fb.setAccessToken(的access_token);
Toast.makeText(getApplicationContext(),你已经登录,
                 Toast.LENGTH_SHORT).show();
         }         如果(到期!= 0){
             fb.setAccessExpires(到期);
Toast.makeText(getApplicationContext(),你已经登录,
                 Toast.LENGTH_SHORT).show();
的access_token = NULL;
期满= 0;         }        如果(!fb.isSessionValid()){
            fb.authorize(这一点,
                    新的String [] {电子邮件,publish_stream},
                    新DialogListener(){                        @覆盖
                        公共无效onCancel(){
                            //函数来处理事件取消
                        }                        @覆盖
                        公共无效的onComplete(束值){
                            //函数来处理完成事件
                            //编辑preferences和更新Facebook的acess_token
                            共享preferences.Editor编辑= M prefs.edit();
                            editor.putString(的access_token
                                    fb.getAccessToken());
                            editor.putLong(access_expires
                                    fb.getAccessExpires());
                            editor.commit();                            //制作登录按钮隐形
                            login.setVisibility(View.VISIBLE);                            //使注销按钮可见
                            getData.setVisibility(View.VISIBLE);
                        }                        @覆盖
                        公共无效onerror的(DialogError错误){
                            //函数来处理错误                        }                        @覆盖
                        公共无效onFacebookError(FacebookError fberror){
                            //函数来处理Facebook的错误                        }                    });
        }
    }    @覆盖
    公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
        super.onActivityResult(要求code,结果code,数据);
        fb.authorizeCallback(要求code,结果code,数据);
    }
    @燮pressWarnings(德precation)
    公共无效getProfileInformation(){
        mAsyncRunner.request(我,新RequestListener(){
            公共无效的onComplete(字符串响应,对象的状态){
                Log.d(档案,响应);
                JSON字符串=响应;
                尝试{
                    // Facebook个人资料JSON数据
                    JSONObject的轮廓=新的JSONObject(JSON);                    //获取用户名
                    最终的字符串名称= profile.getString(名称);                    //获取用户的电子邮件
                    最后弦乐电子邮件= profile.getString(电子邮件);                    runOnUiThread(新的Runnable(){                        @覆盖
                        公共无效的run(){
                            Toast.makeText(getApplicationContext(),名称:+名称+\\ nEmail:+电子邮件,Toast.LENGTH_LONG).show();                        }                    });
                }赶上(JSONException E){
                    e.printStackTrace();
                }
            }            公共无效onIOException(IOException异常即对象的状态){
            }            公共无效onFileNotFoundException(FileNotFoundException异常E,
                    对象的状态){
            }            公共无效onMalformedURLException(MalformedURLException的E,
                    对象的状态){
            }            公共无效onFacebookError(FacebookError即对象的状态){
            }
        });    }
     @德precated
     公共无效logoutFromFacebook(){            mAsyncRunner.logout(MainActivity.this,新RequestListener(){
                @覆盖
                公共无效的onComplete(字符串响应,对象的状态){
                    Log.d(注销从Facebook,响应);
                    如果(Boolean.parseBoolean(响应)==真){
                        runOnUiThread(新的Runnable(){                            @覆盖
                            公共无效的run(){
                                //使登录按钮可见
                                login.setVisibility(View.VISIBLE);                                //使得所有剩余的按钮隐形
                                getData.setVisibility(View.INVISIBLE);                            }                        });                    }
                }                @覆盖
                公共无效onIOException(IOException异常即对象的状态){
                }                @覆盖
                公共无效onFileNotFoundException(FileNotFoundException异常E,
                        对象的状态){
                }                @覆盖
                公共无效onMalformedURLException(MalformedURLException的E,
                        对象的状态){
                }                @覆盖
                公共无效onFacebookError(FacebookError即对象的状态){
                }
            });
        }}

LogCat中

  04-16 17:42:34.226:E / AndroidRuntime(32465):致命异常:螺纹4017
04-16 17:42:34.226:E / AndroidRuntime(32465):java.lang.IllegalArgumentException异常:无效的上下文参数
04-16 17:42:34.226:E / AndroidRuntime(32465):在android.webkit.CookieSyncManager.createInstance(CookieSyncManager.java:86)
04-16 17:42:34.226:E / AndroidRuntime(32465):在com.facebook.internal.Utility.clearCookiesForDomain(Utility.java:286)
04-16 17:42:34.226:E / AndroidRuntime(32465):在com.facebook.internal.Utility.clearFacebookCookies(Utility.java:310)
04-16 17:42:34.226:E / AndroidRuntime(32465):在com.facebook.Session.closeAndClearTokenInformation(Session.java:614)
04-16 17:42:34.226:E / AndroidRuntime(32465):在com.facebook.android.Facebook.logoutImpl(Facebook.java:665)
04-16 17:42:34.226:E / AndroidRuntime(32465):在com.facebook.android.AsyncFacebookRunner $ 1.run(AsyncFacebookRunner.java:89)


解决方案

试试这个:

我希望这将是对您有所帮助...

 如果(mFacebook.isSessionValid()){
  尝试{
    字符串str = mFacebook.logout(getApplicationContext());
    SessionStore.clear(getApplicationContext());
        }赶上(MalformedURLException的E)
                 {
            e.printStackTrace();
         }赶上(IOException异常五){
           e.printStackTrace();
                }
                }

i have create an app in whick i m logging in facebook, and getting data from facebook.,but my logout method is not working,what is the problem,i am unable to understand,after launching the app in device whatever id i fill in starting it always getting data from that onle,it is not getting logout and i am unable to login through another id.please suggest me something.

MainActivity

public class MainActivity extends Activity {
    Facebook fb;
Button login,getData,logout;    
ImageView ig;
String app_id;
private AsyncFacebookRunner mAsyncRunner;
String FILENAME = "AndroidSSO_data";
private SharedPreferences mPrefs;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
     app_id= getString(R.string.app_id);
     fb= new Facebook(app_id);
        login=(Button) findViewById(R.id.login);
        logout=(Button) findViewById(R.id.logout);
        getData=(Button) findViewById(R.id.getData);
        // ig= (ImageView) findViewById(R.id.profile_pic);
         login.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    loginToFacebook();
                }
            });

getData.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        getProfileInformation();
    }
});
     logout.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
    if(fb.isSessionValid()){
        logoutFromFacebook();

}
}
});
mAsyncRunner = new AsyncFacebookRunner(fb);
//updateButtonImage();

    }





    @SuppressWarnings("deprecation")
    public void loginToFacebook() {

         mPrefs = getPreferences(MODE_PRIVATE);
         String access_token = mPrefs.getString("access_token", null);
         long expires = mPrefs.getLong("access_expires", 0);

         if (access_token != null) {
             fb.setAccessToken(access_token);
Toast.makeText(getApplicationContext(), "You Already Login",
                 Toast.LENGTH_SHORT).show();
         }

         if (expires != 0) {
             fb.setAccessExpires(expires);
Toast.makeText(getApplicationContext(), "You Already Login",
                 Toast.LENGTH_SHORT).show();
access_token=null;
expires=0;

         }



        if (!fb.isSessionValid()) {
            fb.authorize(this,
                    new String[] { "email", "publish_stream" },
                    new DialogListener() {

                        @Override
                        public void onCancel() {
                            // Function to handle cancel event
                        }

                        @Override
                        public void onComplete(Bundle values) {
                            // Function to handle complete event
                            // Edit Preferences and update facebook acess_token
                            SharedPreferences.Editor editor = mPrefs.edit();
                            editor.putString("access_token",
                                    fb.getAccessToken());
                            editor.putLong("access_expires",
                                    fb.getAccessExpires());
                            editor.commit();

                            // Making Login button invisible
                            login.setVisibility(View.VISIBLE);

                            // Making logout Button visible
                            getData.setVisibility(View.VISIBLE);


                        }

                        @Override
                        public void onError(DialogError error) {
                            // Function to handle error

                        }

                        @Override
                        public void onFacebookError(FacebookError fberror) {
                            // Function to handle Facebook errors

                        }

                    });
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        fb.authorizeCallback(requestCode, resultCode, data);
    }


    @SuppressWarnings("deprecation")
    public void getProfileInformation() {
        mAsyncRunner.request("me", new RequestListener() {
            public void onComplete(String response, Object state) {
                Log.d("Profile", response);
                String json = response;
                try {
                    // Facebook Profile JSON data
                    JSONObject profile = new JSONObject(json);

                    // getting name of the user
                    final String name = profile.getString("name");

                    // getting email of the user
                    final String email = profile.getString("email");

                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), "Name: " + name + "\nEmail: " + email, Toast.LENGTH_LONG).show();

                        }

                    });


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            public void onIOException(IOException e, Object state) {
            }

            public void onFileNotFoundException(FileNotFoundException e,
                    Object state) {
            }

            public void onMalformedURLException(MalformedURLException e,
                    Object state) {
            }

            public void onFacebookError(FacebookError e, Object state) {
            }
        });

    }


     @Deprecated
     public void logoutFromFacebook() {

            mAsyncRunner.logout(MainActivity.this, new RequestListener() {
                @Override
                public void onComplete(String response, Object state) {
                    Log.d("Logout from Facebook", response);
                    if (Boolean.parseBoolean(response) == true) {
                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                // make Login button visible
                                login.setVisibility(View.VISIBLE);

                                // making all remaining buttons invisible
                                getData.setVisibility(View.INVISIBLE);

                            }

                        });

                    }
                }

                @Override
                public void onIOException(IOException e, Object state) {
                }

                @Override
                public void onFileNotFoundException(FileNotFoundException e,
                        Object state) {
                }

                @Override
                public void onMalformedURLException(MalformedURLException e,
                        Object state) {
                }

                @Override
                public void onFacebookError(FacebookError e, Object state) {
                }
            });
        }

}

LogCat

04-16 17:42:34.226: E/AndroidRuntime(32465): FATAL EXCEPTION: Thread-4017
04-16 17:42:34.226: E/AndroidRuntime(32465): java.lang.IllegalArgumentException: Invalid context argument
04-16 17:42:34.226: E/AndroidRuntime(32465):    at android.webkit.CookieSyncManager.createInstance(CookieSyncManager.java:86)
04-16 17:42:34.226: E/AndroidRuntime(32465):    at com.facebook.internal.Utility.clearCookiesForDomain(Utility.java:286)
04-16 17:42:34.226: E/AndroidRuntime(32465):    at com.facebook.internal.Utility.clearFacebookCookies(Utility.java:310)
04-16 17:42:34.226: E/AndroidRuntime(32465):    at com.facebook.Session.closeAndClearTokenInformation(Session.java:614)
04-16 17:42:34.226: E/AndroidRuntime(32465):    at com.facebook.android.Facebook.logoutImpl(Facebook.java:665)
04-16 17:42:34.226: E/AndroidRuntime(32465):    at com.facebook.android.AsyncFacebookRunner$1.run(AsyncFacebookRunner.java:89)

解决方案

Try this :

I hope this will be help to you...

  if( mFacebook.isSessionValid() ) {
  try {
    String str=mFacebook.logout(getApplicationContext());
    SessionStore.clear(getApplicationContext());
        } catch (MalformedURLException e)       
                 {                      
            e.printStackTrace();
         } catch (IOException e) {
           e.printStackTrace();
                }
                }

这篇关于混得注销错误从Facebook的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆