如何将 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 从登录用户获取用户个人资料图片

使用 Fabric SDK 从 Twitter 授权中取消时出现授权错误

如何从我的 iOS 应用程序中删除 Twitter 的会话和 cookie