Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>You can try use my FBHelper class.</p> <pre><code>public class FBHelper { private SharedPreferences mPrefs; private Context context; private final String ACCES_TOKEN = "access_token"; private final String ACCES_EXPIRES = "access_expires"; private Facebook facebook; private FBHelperCallbacks callback; public FBHelper(Context context, Facebook facebook) { this.context = context; this.facebook = facebook; } public void setSignInFinishListener(FBHelperCallbacks callback) { this.callback = callback; } public void FacebookSingleSignIn() { mPrefs = ((Activity)context).getPreferences(Context.MODE_PRIVATE); String access_token = mPrefs.getString(ACCES_TOKEN, null); long expires = mPrefs.getLong(ACCES_EXPIRES, 0); if(access_token != null) { facebook.setAccessToken(access_token); } if(expires != 0) { facebook.setAccessExpires(expires); } /* * Only call authorize if the access_token has expired. */ if(!facebook.isSessionValid()) { Log.i("Facebook","Facebook session is not valid based on acces token... authorizing again"); facebook.authorize((Activity)context, new String[] {"user_about_me"},new DialogListener() { @Override public void onFacebookError(FacebookError e) { e.printStackTrace(); callback.onError(e.toString()); } @Override public void onError(DialogError e) { Log.i("Facebook","onError inner"); callback.onError(e.toString()); } @Override public void onComplete(Bundle values) { SharedPreferences.Editor editor = mPrefs.edit(); editor.putString(ACCES_TOKEN, facebook.getAccessToken()); Log.i("Facebook","Saving acces token:"+facebook.getAccessToken()); editor.putLong(ACCES_EXPIRES, facebook.getAccessExpires()); editor.commit(); callback.onSignedInFinished(facebook.getAccessToken()); } @Override public void onCancel() { callback.onError("onCancel"); } }); } else { Log.i("Facebook","Accces token read form preferencesno no need to authorize"); callback.onSignedInFinished(facebook.getAccessToken()); } } public String LogOut() { try { //set ACCES_TOKEN to null mPrefs = ((Activity)context).getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = mPrefs.edit(); editor.putString(ACCES_TOKEN, null); editor.putLong(ACCES_EXPIRES, 0); editor.commit(); return facebook.logout(context); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "Error"; } public static abstract class FBHelperCallbacks{ public abstract void onSignedInFinished(String accesToken); public abstract void onError(String message); } } </code></pre> <p>This is how you use this class.</p> <pre><code>public class LogInActivity extends Activity { private static final String TAG = "LogInActivity"; public static final int REQUEST_CODE = 1; private Context context; private Facebook facebook; private FBHelper fbhelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_log_in); this.context = this; Handler pauser = new Handler(); pauser.postDelayed (new Runnable() { public void run() { facebook = new Facebook(context.getString(R.string.FACEBOOK_APP_ID)); fbhelper = new FBHelper(context, facebook); if (aHelper.isLogedIn()) { //log out fbhelper.LogOut(); } else { //facebook login fbhelper.setSignInFinishListener(fbcallback); fbhelper.FacebookSingleSignIn(); } } }, 100); } FBHelperCallbacks fbcallback = new FBHelperCallbacks() { @Override public void onSignedInFinished(String accesToken) { Log.d(TAG,"log in finish"); } @Override public void onError(String message) { setResult(RESULT_CANCELED); finish(); } }; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { facebook.authorizeCallback(requestCode, resultCode, data); } } </code></pre> <p>aHelper is object that hold some application specific data. Basically you should decide here if you want to log in or log out.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload