Simply have a field of Bundle in your TokenCache implementation that your load() method returns. Just make sure you don't yet pass a reference to the TokenCache to FB until that Bundle is initialized by some init(bundle) method, e.g.
static class BundleRetrievalTask extends AsyncTask<String, Void, Bundle> {
@Override
protected Bundle doInBackground(String... strings) {
return someLongOperationThatFetchesBundle(strings[0]);
}
@Override
protected void onPostExecute(Bundle bundle) {
super.onPostExecute(bundle);
MyFacebookTokenCache tokenCache = MyFacebookTokenCache.init(bundle);
doSomethingWithCache(tokenCache);
}
}
static class MyFacebookTokenCache extends TokenCache {
private Bundle mBundle;
public MyFacebookTokenCache(Bundle bundle) {
mBundle = bundle;
}
public static MyFacebookTokenCache init(Bundle bundle) {
return new MyFacebookTokenCache(bundle);
}
@Override
public Bundle load() {
return mBundle;
}
@Override
public void save(Bundle bundle) {
//todo
}
@Override
public void clear() {
//todo
}
}