无法创建ShareEmailActivity - 没有用于id的TwitterSession

时间:2016-07-09 03:37:00

标签: android twitter twitter-fabric

问题

我在 Android SDK 22 上遇到 twitter.sdk.android:twitter:1.14.1 的问题。

登录过程正常,但当我必须要求获取电子邮件地址的权限时,我得到以下异常。

E/Twitter: Failed to create ShareEmailActivity.
  java.lang.IllegalArgumentException: No TwitterSession for id:559455005
     at com.twitter.sdk.android.core.identity.ShareEmailActivity.getSession(ShareEmailActivity.java:85)
     at com.twitter.sdk.android.core.identity.ShareEmailActivity.onCreate(ShareEmailActivity.java:58)
     at android.app.Activity.performCreate(Activity.java:6876)

代码

你知道吗?在我目前的实施之后:

MyApplication.java

public class MyApplication extends Application {

    private static final String TWITTER_KEY = "------------";
    private static final String TWITTER_SECRET = "---------------------";

    private TwitterAuthConfig authConfig;

    public void onCreate(){
        super.onCreate();
        authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
        Fabric.with(this, new Twitter(authConfig));
    }

}

LoginActivity.java

public class LoginActivity extends Activity {

  private TwitterLoginButton mFormButtonTwitterLogin

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mFormButtonTwitterLogin = (TwitterLoginButton) findViewById(R.id.form_button_twitter_login);
    mFormButtonTwitterLogin.setCallback(new Callback<TwitterSession>() {
        @Override
        public void success(Result<TwitterSession> result) {
            TwitterSession session = result.data;
            try {
                new TwitterAuthClient().requestEmail(session, new Callback<String>() {
                    @Override
                    public void success(Result<String> result) {
                      final String email = result.data;
                      Toast.makeText(getApplicationContext(), email, Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void failure(TwitterException exception) {
                        Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
            } catch (Exception exception) {
                Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void failure(TwitterException exception) {
            Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      mFormButtonTwitterLogin.onActivityResult(requestCode, resultCode, data);
  }
}

1 个答案:

答案 0 :(得分:0)

尝试通过Factory创建Builder的实例。

final Fabric fabric = new Fabric.Builder(this)
            .kits(new Twitter(authConfig))
            .logger(new DefaultLogger(Log.DEBUG))
            .debuggable(true)
            .build();

因为你从不构建Factory方法。

希望这有帮助。