1

I want to send twitter session from activity to another activity.I have searched(How to pass an object from one activity to another on Android) but there is something wrong serializable TwitterSession. The scenario is when a user login successfully this session information goes to the MainActivity. Here is my code. What is my wrong ?

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;
    }
}

Login.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");          
    }
Community
  • 1
  • 1
Trinity
  • 486
  • 8
  • 27

2 Answers2

3

You can't pass it like that. TwitterSession isn't serializable so you can't make it a member of a serializable class.

Since TwitterSession is singleton, you can simply call the following method from your MainActivity

TwitterSession session = Twitter.getSessionManager().getActiveSession();

So your activity code would look like

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TwitterSession session = Twitter.getSessionManager().getActiveSession();

}
0

in your 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);
}
Mounir Elfassi
  • 2,242
  • 3
  • 23
  • 38