如何将 Twitter Fabric 会话从 Activity 发送到另一个 Activity?
Posted
技术标签:
【中文标题】如何将 Twitter Fabric 会话从 Activity 发送到另一个 Activity?【英文标题】:How to send Twitter Fabric Session from Activity to Another Activity? 【发布时间】:2015-08-23 17:11:49 【问题描述】:我想将 twitter 会话从活动发送到另一个活动。我已经搜索过 (How to pass an object from one activity to another on android),但是可序列化的 TwitterSession 有问题。该场景是当用户成功登录时,此会话信息会转到 MainActivity。这是我的代码。 我怎么了?
TwitterSessionObject.java
import com.twitter.sdk.android.core.TwitterSession;
import java.io.Serializable;
public class TwitterSessionObject implements Serializable
private TwitterSession session;
public TwitterSessionObject(TwitterSession twitterSession)
this.session = twitterSession;
public TwitterSession getTwitterSession()
return session;
public void setSession(TwitterSession session)
this.session = session;
登录.java
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric.with(this, new Twitter(authConfig));
setContentView(R.layout.activity_login);
loginButton = (TwitterLoginButton) findViewById(R.id.twitter_login_button);
loginButton.setCallback(new Callback<TwitterSession>()
@Override
public void success(Result<TwitterSession> result)
// Do something with result, which provides a TwitterSession for making API calls
TwitterSession session = Twitter.getSessionManager().getActiveSession();
TwitterAuthToken authToken = session.getAuthToken();
String token = authToken.token;
String secret = authToken.secret;
TwitterSessionObject sessionObject = new TwitterSessionObject(session);
Intent intent = new Intent(Login.this, MainActivity.class);
intent.putExtra("Session", sessionObject);
startActivity(intent);
@Override
public void failure(TwitterException exception)
// Do something on failure
);
MainActivity.java
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
TwitterSessionObject session = (TwitterSessionObject)intent.getSerializableExtra("Session");
【问题讨论】:
【参考方案1】:你不能这样通过。 TwitterSession
不可序列化,因此您不能使其成为可序列化类的成员。
由于 TwitterSession 是单例的,你可以简单地从你的 MainActivity 中调用以下方法
TwitterSession session = Twitter.getSessionManager().getActiveSession();
所以你的活动代码看起来像
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TwitterSession session = Twitter.getSessionManager().getActiveSession();
【讨论】:
哦,我太粗心了。几小时不眠。谢谢大佬!【参考方案2】:在您的 MainActivity 中:
public class MainActivity extends Activity
private TwitterLoginButton loginButton;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
Boolean restoredText = prefs.getBoolean("loginStatus", false);
if (restoredText == true)
startActivity(new Intent(this, YourTwitterClass.class));
finish(); // destroy login so user can't come back with back button
loginButton = (TwitterLoginButton) findViewById(R.id.twitter_login_button);
loginButton.setCallback(new Callback<TwitterSession>()
@Override
public void success(Result<TwitterSession> result)
startActivity(new Intent(this, YourTwitterClass.class));
@Override
public void failure(TwitterException exception)
//do something
);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
loginButton.onActivityResult(requestCode, resultCode, data);
【讨论】:
以上是关于如何将 Twitter Fabric 会话从 Activity 发送到另一个 Activity?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用fabric从twitter webview中检索登录回调
如何使用适用于 Android 的 Fabric Sdk 从 Twitter 注销
如何从 android 项目中完全卸载 Twitter 的 Fabric SDK?
如何在 iOS 中使用 Twitter Kit/Fabric 从登录用户获取用户个人资料图片