为什么 getOAuthAccessToken 方法总是在 twitter4j api 中引发异常?

2023-11-24

我正在按照大量说明从我的应用程序中创建一条简单的推文。我已经在 Twitter 上注册了,但我就是无法发推文。我可以登录,但无法更新我的状态。这是登录代码

private void twitterLogOn() {
        Twitter twitter = new TwitterFactory().getInstance();
        try {

            twitter.setOAuthConsumer(consumerKey, consumerSecret);
            rToken = twitter.getOAuthRequestToken(myCallBack);
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(rToken.getAuthenticationURL())));
        } catch (IllegalStateException e) {
            // access token is already available, or consumer key/secret is not
            // set.
            if (!twitter.getAuthorization().isEnabled()) {
                System.out.println("OAuth consumer key/secret is not set.");
                finish();
            }
        } catch (Exception e) {
            Toast.makeText(Configuration.this,getString(R.string.networkError), Toast.LENGTH_SHORT).show();
        }
    }

这似乎工作正常,但是当我在登录后返回到我的应用程序时,应该执行下一个代码,并始终以异常 Toast 结束。

public void onResume() {    
        super.onResume();

        Uri uri = getIntent().getData();

        if (uri != null) {    
            oauthVerifier = uri.getQueryParameter("oauth_verifier");

            try {    
                Twitter tt = new TwitterFactory().getInstance(); // Do I need this new twitter instance?
                tt.setOAuthConsumer(consumerKey, consumerSecret);
                AccessToken at = tt.getOAuthAccessToken(rToken, oauthVerifier); // Gives the error

                       // Do tweet here ...

                } catch (Exception e) {
                    Toast.makeText(Configuration.this, "Network Host not responding",Toast.LENGTH_SHORT).show();
                }
            }
    }

任何好的鹰眼可以告诉我我做错了什么吗?这是引发异常的行

AccessToken at = tt.getOAuthAccessToken(rToken, oauthVerifier);

提前致谢!

EDIT

堆栈跟踪:(在某处读取这只是隐藏 401 错误)

07-24 12:49:31.931: WARN/System.err(18441): Received authentication challenge is nullRelevant discussions can be on the Internet at:
07-24 12:49:31.931: WARN/System.err(18441):     http://www.google.co.jp/search?q=9ddbeb3a or
07-24 12:49:31.931: WARN/System.err(18441):     http://www.google.co.jp/search?q=5c9c15a6
07-24 12:49:31.931: WARN/System.err(18441): TwitterException{exceptionCode=[9ddbeb3a-5c9c15a6 c8a7b39b-36e69ae1], statusCode=-1, retryAfter=-1, rateLimitStatus=null, featureSpecificRateLimitStatus=null, version=2.2.3}
07-24 12:49:31.931: WARN/System.err(18441):     at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:204)
07-24 12:49:31.931: WARN/System.err(18441):     at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65)
07-24 12:49:31.931: WARN/System.err(18441):     at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:102)
07-24 12:49:31.931: WARN/System.err(18441):     at twitter4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:142)
07-24 12:49:31.931: WARN/System.err(18441):     at twitter4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:160)
07-24 12:49:31.931: WARN/System.err(18441):     at twitter4j.TwitterBaseImpl.getOAuthAccessToken(TwitterBaseImpl.java:349)
07-24 12:49:31.931: WARN/System.err(18441):     at com.my.app.TwitterTweetActivity.onResume(TwitterTweetActivity.java:76)
07-24 12:49:31.931: WARN/System.err(18441):     at com.my.app.TwitterTweetActivity.onResume(TwitterTweetActivity.java:64)
07-24 12:49:31.931: WARN/System.err(18441):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
07-24 12:49:31.931: WARN/System.err(18441):     at android.app.Activity.performResume(Activity.java:3833)
07-24 12:49:31.931: WARN/System.err(18441):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2215)
07-24 12:49:31.941: WARN/System.err(18441):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2240)
07-24 12:49:31.941: WARN/System.err(18441):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1773)
07-24 12:49:31.941: WARN/System.err(18441):     at android.app.ActivityThread.access$1500(ActivityThread.java:123)
07-24 12:49:31.941: WARN/System.err(18441):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:936)
07-24 12:49:31.941: WARN/System.err(18441):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-24 12:49:31.941: WARN/System.err(18441):     at android.os.Looper.loop(Looper.java:123)
07-24 12:49:31.941: WARN/System.err(18441):     at android.app.ActivityThread.main(ActivityThread.java:3812)
07-24 12:49:31.941: WARN/System.err(18441):     at java.lang.reflect.Method.invokeNative(Native Method)
07-24 12:49:31.941: WARN/System.err(18441):     at java.lang.reflect.Method.invoke(Method.java:507)
07-24 12:49:31.941: WARN/System.err(18441):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
07-24 12:49:31.941: WARN/System.err(18441):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
07-24 12:49:31.941: WARN/System.err(18441):     at dalvik.system.NativeStart.main(Native Method)
07-24 12:49:31.941: WARN/System.err(18441): Caused by: java.io.IOException: Received authentication challenge is null
07-24 12:49:31.941: WARN/System.err(18441):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.processAuthHeader(HttpURLConnectionImpl.java:1153)
07-24 12:49:31.941: WARN/System.err(18441):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.processResponseHeaders(HttpURLConnectionImpl.java:1095)
07-24 12:49:31.951: WARN/System.err(18441):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1048)
07-24 12:49:31.951: WARN/System.err(18441):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:726)
07-24 12:49:31.951: WARN/System.err(18441):     at twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.java:35)
07-24 12:49:31.951: WARN/System.err(18441):     at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:168)
07-24 12:49:31.951: WARN/System.err(18441):     ... 22 more

该方法的API:获取OAuth请求令牌


我自己解决了,只花了4个小时!

我不能 100% 确定其推理,但我知道修复是有效的。

Fix:

在此 Activity 的清单中,您需要将其设为单个实例:

 <activity
        android:name=".TwitterTweetActivity"
        android:launchMode="singleInstance">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="your-unique-schema-01-android" />
        </intent-filter>
    </activity>

现在,当您的 Activity 恢复时,您需要使用以下命令捕获它从浏览器返回onNewIntent()像这样:

 @Override
protected void onResume() {
    super.onResume();
    dealWithTwitterResponse(getIntent());
}

替换为:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    dealWithTwitterResponse(intent);
}
 

它应该有效!

推理(如果我错了请纠正我):

所以问题是你的rToken对象与创建时的对象不同...

当您创建 Twitter 实例并获取rToken对象这在您的活动中。然后该活动进入后台(onPause),同时浏览器出现供用户登录。

重新创建活动时,rToken 对象是不同的因此这就是为什么getOAuthAccessToken()方法抛出错误。

额外学分:

我刚刚写了一个与之匹配的教程:如何在 Android 上从用户帐户发送推文

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 getOAuthAccessToken 方法总是在 twitter4j api 中引发异常? 的相关文章

  • 合并两个位图图像(并排)

    任何人都可以帮助将两个位图图像合并为单个位图 在android中 并排 谢谢 尤瓦拉吉 您可以使用Canvas 查看这篇文章 http www jondev net articles Combining 2 Images in Androi
  • 更改工具栏中汉堡图标的大小?

    我有两个问题 可能很奇怪 但无论如何 我有带有应用程序标题的工具栏 如何将其更改为非徽标的图片 下一个问题 是否可以设置 更改工具栏中汉堡图标的大小 我在下面的下一个代码的帮助下制作了经典的导航抽屉 我也使用了 ActionBarDrawe
  • android 谷歌+登录定制

    我正在创建一个 Android 应用程序 现在我正在实现社交网络登录 Facebook 按钮很好 但 google 按钮的语言与 Facebook 不同 另外 它只说 登录 我想让它说 用谷歌登录 我是 android 编程的新手 看到我需
  • Mailgun POST /messages API 总是抛出 401 禁止

    我正在尝试使用改造库在 Android 中发送 Mailgun POST messages API 请求 以下是改装要求 HTTP POSThttps api key xxx v3 sandboxxxx messages https api
  • MI设备中即使应用程序被杀死,如何运行后台服务

    您好 我正在使用 alaram 管理器运行后台服务 它工作正常 但对于某些 mi 设备 后台服务无法工作 我使用了服务 但它无法工作 如何在 mi 中运行我的后台服务 MI UI有自己的安全选项 所以你需要的不仅仅是上面提到的粘性服务 你需
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • layout.xml 的用途是什么?

    人们为什么使用layout xml在他们的resources like
  • Flutter / FireStore:如何在 Flutter 中显示 Firestore 中的图像?

    我想将我在应用程序中使用的一些图像放入 Firestore 并从那里显示它们 而不是将它们作为资产捆绑在我的应用程序中 为了做到这一点 我想出了以下解决方案 对于我想要显示图像的项目 我创建了一个 Firebase 文档 其中有一个字段存储
  • 如何检测 Google Play 上是否有我的应用程序的更新? [复制]

    这个问题在这里已经有答案了 有没有办法以编程方式检查 Google Play 上我的应用程序是否有更新 以便通知用户 我知道 android google play 有自动通知 但我想使用我自己的通知 弹出消息来更新可用性 有点像 Vibe
  • 在 Android 上的测试用例之外运行 ExtractDecodeEditEncodeMuxTest

    我正在尝试添加在 Android 上提取 解码 编辑 编码和混合视频的功能 因此 我发现了一些非常有用的实现 它是Android CTS的一部分ExtractDecodeEditEncodeMuxTest https android goo
  • Python Kivy - 在本机网络浏览器中打开 url 的应用程序

    我尝试制作一个简单的应用程序 在单击 Screen One 上的按钮后 在 Kivy 中打开一个网页 我使用了这个主题 Python 在应用程序中直接显示网络浏览器 iframe https stackoverflow com questi
  • 如何覆盖日期选择器的高度和宽度以填充父布局

    我有一个活动包含一个日期选择器 我想设置DatePicker适合屏幕 我试过这个答案 https stackoverflow com questions 6674667 how to customize date pickers width
  • Android:如何监控WiFi信号强度

    当信号强度发生变化时我会收到通知 我尝试创建以下方法并在 onCreate 中调用它 private void initializeWiFiListener Log i TAG executing initializeWiFiListene
  • 如何在 WebView 中添加 JavaScript 函数并稍后在提交 reCAPTCHA 时从 HTML 调用它

    我在 WebView 中添加一个 JavaScript 函数 如下所示 Kotlin val webView findViewById R id webview as WebView webView getSettings setJavaS
  • 如何在新标签 android webview 中打开链接? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经使用 webview 创建了一个 android 应用程序来显示我的网站 我什至想添加在新选项卡中打开链接的功能 但我找不到任何
  • 带有空白白屏的 WebView

    我在 DialogFragment 中有一个 webview 它使用以下方式显示文档和 PDF它可以进行几次尝试 但如果用户尝试频繁打开和关闭对话框 webview 将显示空白屏幕 我已经尝试了所有的线程link1 https stacko
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • Google Android Drive api 在已安装版本上登录失败

    我开发了一个使用 GoogleDrive api 的 Android 应用程序 当处于调试状态或运行调试版本时 应用程序 工作正常 并正确验证附加的谷歌帐户 等 当我构建发行版本时 使用我的签名密钥 并且 安装apk文件 当我运行时 Goo
  • 修改 ADW Android 启动器?

    我想更改和修改开源 ADW 启动器 启动器可在此处获取 https github com AnderWeb android packages apps Launcher https github com AnderWeb android p

随机推荐

  • 元素节点和文本节点的区别

  • C# 4.0 WCF REST JSON - HTTP GET 代码 400 错误请求

    当尝试创建一个简单的服务以通过遵循几个教程返回简单的 JSON 字符串时 我被困在两台不同的机器上 并收到 HTTP Statuscode 400 错误请求 示例教程 使用 JSON 的 RESTful WCF 服务 pt 1 和 pt 2
  • 使用 sed 在主机文件的行尾添加地址

    我的主机文件中有一个特定行用于本地 Wordpress Multisite 安装 如下所示 127 0 0 1 localhost domain dev site1 domain dev site2 domain dev 我正在编写一个 S
  • PHP 字母循环

    为什么这不起作用 请告诉我 您的代码中有两个问题 首先 单引号字符串 的行为与双引号字符串 当使用单引号字符串时 转义序列 除了 and 不被解释并且变量不被消耗 这可以这样修复 删除引号 或将它们更改为双引号 string hey for
  • 基于索引掩码 numpy 数组

    如何根据实际索引值屏蔽数组 也就是说 如果我有一个 10 x 10 x 30 矩阵 并且我想在第一个和第二个索引彼此相等时屏蔽该数组 例如 1 1 应该被屏蔽 因为 1 和 1 彼此相等 但是 1 2 不应该 因为他们不这样做 我只用三维来
  • iOS 11 Safari HTML - 禁用“智能标点符号”?

    有没有好的方法来禁用 SmartiOS 11 Apple 键盘生成的标点符号 在 Safari 中的 HTML 登录表单上 特别是用户名字段 问题是我们的用户名中含有撇号 在 iOS 11 上输入用户名并且不了解 unicode 的微妙之处
  • Android:ViewHolder 模式和不同类型的行?

    ViewHolder 模式提高了 ListView 滚动帧率 如以下示例所示 https developer android com resources samples ApiDemos src com example android ap
  • Cassandra:使用包含大于或小于(< 和 >)的 where 子句进行查询

    我正在使用 Cassandra 1 1 2 我正在尝试将 RDBMS 应用程序转换为 Cassandra 在我的 RDBMS 应用程序中 我有以下名为 table1 的表 Col1 Col2 Col3 Col4 Col1 字符串 主键 Co
  • python:如果超过特定文件大小,则输出到另一个文本文件

    我在 ubuntu 中使用 scapy 和 python 我想问是否有人知道如何编写示例 假设我有两个文本文件在脚本运行时正在写入 那么我想检查该文件是否超过示例 500 字节 如果超过 那么它将存储文件中的所有内容并创建一个新的文本文件来
  • 如何在 Google Chrome 中启动 JavaScript 调试器?

    使用 Google Chrome 时 我想调试一些 JavaScript 代码 我怎样才能做到这一点 尝试将其添加到您的源中 debugger 它适用于大多数 如果不是所有 浏览器 只需将它放在代码中的某个位置 它就会充当断点
  • C++ 中的 sizeof 运算符是如何实现的?

    有人可以向我指出 sizeof 运算符在 C 中的实现以及有关其实现的一些描述吗 sizeof 是不能重载的运算符之一 那么这意味着我们无法更改其默认行为 sizeof不是 C 中的真正运算符 它只是插入一个等于参数大小的常量的特殊语法 s
  • Python 中匹配非空白的正则表达式

    我想用研究提取第一组非空白字符 我有以下伪脚本来重现我的问题 usr bin env python2 7 import re line STARC 1 1 1 5 ConsCase WARNING Warning m re search S
  • C++,根据一个向量对另一个向量进行排序[重复]

    这个问题在这里已经有答案了 我得到的最好的例子是我想根据分数对名称进行排序 vector
  • R 缺少哪些其他语言有的调试工具? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我熟悉browser trace traceback and options error
  • .NET HttpWebRequest 速度与浏览器

    我有一个关于 Net HttpWebRequest 客户端 或 WebClient 给出类似结果 性能的问题 如果我使用 HttpWebRequest 请求 html 页面 在本例中为 news bbc co uk 并分析应用程序读取响应的
  • 为什么设置 document.domain 不能允许对父域的 AJAX 请求?

    我有两个文件 domain com test2 php div div 和domain com test3 php b var1 var2 b 在本例中 domain com test2 php 输出var1 1 var2 2正如人们所期望
  • 固定长度和类型文字的列表

    我正在尝试在 Haskell 中定义固定长度列表的类型 当我使用标准方法将自然数编码为一元类型时 一切正常 然而 当我尝试在 GHC 的类型文字上构建所有内容时 我遇到了很多问题 我第一次尝试所需的列表类型是 data List n Nat
  • 无法捕获 DataIntegrityViolationException

    我使用 Spring Boot 2 和 spring boot starter data jpa 以及底层 MariaDB 我有一个带有唯一键 用户名 的表 我想抓住DataIntegrityViolationException如果违反了这
  • PHP 扩展对 docker-compose 中的 Composer 容器不可用

    我使用 docker compose 并在一个项目中拥有多个容器 Nginx PHP Composer 和 nginx 一切都很好 除了一件事 作曲家不工作 我正在尝试安装一个使用 GD 扩展的作曲家项目 该项目安装在 PHP 中 在 PH
  • 为什么 getOAuthAccessToken 方法总是在 twitter4j api 中引发异常?

    我正在按照大量说明从我的应用程序中创建一条简单的推文 我已经在 Twitter 上注册了 但我就是无法发推文 我可以登录 但无法更新我的状态 这是登录代码 private void twitterLogOn Twitter twitter