混得注销错误从Facebook [英] getting error on logout from facebook
本文介绍了混得注销错误从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屋!
查看全文