【问题标题】:scribe + twitter > Cannot get String from a null objectscribe + twitter > 无法从空对象获取字符串
【发布时间】:2014-02-02 03:22:46
【问题描述】:

我尝试使用 scribe 对 facebook 和 twitter 进行授权。脸书没有问题。但是当我尝试

requestToken = service.getRequestToken()

推特我得到了

无法从空对象获取字符串

> ru.myx.ae3.exec.ExecErrorDefault
    > Cannot get String from a null object
    > java.lang.IllegalArgumentException
      : org.scribe.utils.Preconditions.check(Preconditions.java:84)
      : org.scribe.utils.Preconditions.checkNotNull(Preconditions.java:31)
      : org.scribe.utils.StreamUtils.getStreamContents(StreamUtils.java:22)
      : org.scribe.model.Response.parseBodyContents(Response.java:43)
      : org.scribe.model.Response.getBody(Response.java:69)
      : org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:60)
      : org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:40)
      : org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:45)
      : sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      : sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      : sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      : java.lang.reflect.Method.invoke(Method.java:606)

谁能帮我解决它?

【问题讨论】:

  • 问题已结束。将提供者 (TwitterApi.class) 更改为提供者 (TwitterApi.Authenticate.class

标签: scribe


【解决方案1】:

幸运的是,Scribe 支持 SSL,您只需要在构建器中使用正确的 TwitterAPI 类(用于 SSL 连接的类:

final OAuthService service = new ServiceBuilder()
.provider(**TwitterApi.SSL.class**)
.apiKey(...)
.apiSecret(...)
.callback(...)
.build();

像魅力一样为我工作:)

【讨论】:

    【解决方案2】:

    我也遇到过这个问题……

    我所做的是创建了一个自定义 TwitterApi,如下所示。由于某种原因,twitter oauth 停止支持 http,只支持 ssl。见下文。

    import org.scribe.builder.api.DefaultApi10a;
    import org.scribe.model.Token;
    
    
    public class CustomTwitterApi extends DefaultApi10a {
    
    private static final String AUTHORIZATION_URL = "https://api.twitter.com/oauth/authorize?oauth_token=%s";
    
    public String getRequestTokenEndpoint() {
        return "https://api.twitter.com/oauth/request_token";
    }
    
    public String getAccessTokenEndpoint() {
        return "https://api.twitter.com/oauth/access_token";
    }
    
    public String getAuthorizationUrl(Token requestToken) {
        return String.format(AUTHORIZATION_URL, requestToken.getToken());
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-27
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多