【问题标题】:How to send Twitter Fabric Session from Activity to Another Activity?如何将 Twitter Fabric 会话从 Activity 发送到另一个 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");          
    }

【问题讨论】:

    标签: java android twitter-fabric


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      相关资源
      最近更新 更多