java - 获取 Jraw 的空访问 token

标签 java kotlin reddit

根据我的理解,当我运行这段代码时,Jraw 中的 OAuthHelper 应该自动生成访问 token ,但事实并非如此。我究竟做错了什么?我在应用程序平台字段中放置了一个随机值。这有关系吗?

public static void main(String[] args) {
    UserAgent userAgent = new UserAgent(
            "appPlatform",
           "appName",
            "version",
            "userName");

    Credentials credentials = Credentials.script(
           "userName",
            "password",
            "clientId",
            "clientSecret"
    );

    NetworkAdapter adapter = new OkHttpNetworkAdapter(userAgent);
    RedditClient redditClient = OAuthHelper.automatic(adapter, credentials);

    // frontPage() returns a Paginator.Builder
    DefaultPaginator<Submission> frontPage = redditClient.frontPage()
            .sorting(SubredditSort.TOP)
            .timePeriod(TimePeriod.DAY)
            .limit(30)
            .build();

    Listing<Submission> submissions = frontPage.next();
    for (Submission s : submissions) {
        System.out.println(s.getTitle());
    }
}

这是堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException: Null accessToken at net.dean.jraw.models.internal.$AutoValue_OAuthDataJson.($AutoValue_OAuthDataJson.java:23) at net.dean.jraw.models.internal.AutoValue_OAuthDataJson.(AutoValue_OAuthDataJson.java:15) at net.dean.jraw.models.internal.AutoValue_OAuthDataJson$MoshiJsonAdapter.fromJson(AutoValue_OAuthDataJson.java:64) at net.dean.jraw.models.internal.AutoValue_OAuthDataJson$MoshiJsonAdapter.fromJson(AutoValue_OAuthDataJson.java:18) at com.squareup.moshi.JsonAdapter.fromJson(JsonAdapter.java:41) at net.dean.jraw.http.HttpResponse.deserializeWith(HttpResponse.kt:49) at net.dean.jraw.oauth.OAuthHelper.scriptOAuthData$lib(OAuthHelper.kt:96) at net.dean.jraw.oauth.OAuthHelper.automatic(OAuthHelper.kt:32) at net.dean.jraw.oauth.OAuthHelper.automatic$default(OAuthHelper.kt:27) at net.dean.jraw.oauth.OAuthHelper.automatic(OAuthHelper.kt) at com.signalscanner.reddit.RedditAuthenticator.main(RedditAuthenticator.java:34)

需要注意的是RedditAuthenticator.java:34是这一行:

RedditClient redditClient = OAuthHelper.automatic(适配器,凭据);

最佳答案

我相信我已经找到了原因。当您在 Reddit 中创建应用程序时,您需要在此部分中选择“脚本”:

enter image description here

我正在调试 JRAW 以查看它在做什么,当它构建发送到 Reddit 的 HTTP 请求时,它会为您的应用程序类型添加一个参数。我不知道您是否可以以某种方式配置 JRAW 以使用任何其他类型,但它使用的默认值是“脚本”

编辑:有关 JRAW 不同身份验证方案的更多信息可以在此处找到 - https://mattbdean.gitbooks.io/jraw/content/v/v1.1.0/oauth2.html

关于java - 获取 Jraw 的空访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52601242/

相关文章:

java - 手动创建表单

kotlin协程withTimeout在使用withContext获取非阻塞代码时不取消

android - 如何为从中心位置到全直径的波纹效果设置动画

python - Reddit 的一行代码(排名功能)让我感到困惑

java - 抽象类的使用

java - 导入中缺少 Guice 多重绑定(bind)包

java - CompareTo 的通用比较类型

android - 当应用程序在后台运行时使用挂起的 Intent 启动 Activity

unicode - 为什么 Firefox 和 Chrome 呈现 "ಠ_ಠ"(U+0CA0) 的方式不同,即使我将两者都设置为 UTF-8?