Twitter4J + Android:身份验证挑战为空异常
Posted
技术标签:
【中文标题】Twitter4J + Android:身份验证挑战为空异常【英文标题】:Twitter4J + Android: Authentication Challenge is Null Exception 【发布时间】:2011-09-02 00:38:39 【问题描述】:我正在使用 Twitter4J 库进行 OAuth 身份验证,但在它打开 Twitter 登录页面之前我收到“身份验证挑战为空异常”。
这是代码。
Twitter twitter = new TwitterFactory().getInstance();
try
twitter.setOAuthConsumer(Startup.TWITTER_KEY, Startup.TWITTER_SECRET);
String callbackURL = "twitter-client:///";
RequestToken rToken = twitter.getOAuthRequestToken(callbackURL);
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.");
System.exit(-1);
catch(Exception e)
Toast.makeText(Home.this, "Network Host not responding: "+e.getMessage(),Toast.LENGTH_SHORT).show(); //This exception.
例外:
E/Home (4393): 收到 身份验证质询为空 电子/家庭(4393):收到 身份验证挑战是 null相关讨论可以在 互联网地址:E/Home (4393): http://www.google.co.jp/search?q=6c607809 或电子/家庭(4393): http://www.google.co.jp/search?q=0f1d8134 电子/家庭(4393): TwitterExceptionexceptionCode=[6c607809-0f1d8134 cab4c0ac-d492a113],状态码=-1, retryAfter=0, rateLimitStatus=null, 版本=2.2.2 E/Home(4393):在 twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:204) 电子/家庭(4393):在 twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65) 电子/家庭(4393):在 twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:102) 电子/家庭(4393):在 twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:108) 电子/家庭(4393):在 twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:271) 电子/家庭(4393):在 com.sharj.trafik.view.Home.askOAuth(Home.java:157) 电子/家庭(4393):在 com.sharj.trafik.view.Home.access$0(Home.java:143) 电子/家庭(4393):在 com.sharj.trafik.view.Home$3.onClick(Home.java:110) 电子/家庭(4393):在 android.view.View.performClick(View.java:2485) 电子/家庭(4393):在 android.view.View$PerformClick.run(View.java:9080) 电子/家庭(4393):在 android.os.Handler.handleCallback(Handler.java:587) 电子/家庭(4393):在 android.os.Handler.dispatchMessage(Handler.java:92) 电子/家庭(4393):在 android.os.Looper.loop(Looper.java:130) 电子/家庭(4393):在 android.app.ActivityThread.main(ActivityThread.java:3683) 电子/家庭(4393):在 java.lang.reflect.Method.invokeNative(Native 方法)电子/家庭(4393):在 java.lang.reflect.Method.invoke(Method.java:507) 电子/家庭(4393):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 电子/家庭(4393):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 电子/家庭(4393):在 dalvik.system.NativeStart.main(Native 方法)电子/家庭(4393):引起: java.io.IOException:收到 身份验证质询为空 电子/家庭(4393):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.processAuthHeader(HttpURLConnectionImpl.java:1153) 电子/家庭(4393):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.processResponseHeaders(HttpURLConnectionImpl.java:1095) 电子/家庭(4393):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1048) 电子/家庭(4393):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:726) 电子/家庭(4393):在 org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:121) 电子/家庭(4393):在 twitter4j.internal.http.HttpResponseImpl.(HttpResponseImpl.java:35) 电子/家庭(4393):在 twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:168) 电子/家庭(4393):... 18 更多
它包含以下链接,但谷歌对此没有太多了解。
http://www.google.co.jp/search?q=6c607809
http://www.google.co.jp/search?q=0f1d8134
【问题讨论】:
完整的堆栈跟踪会很有帮助。 我遇到了同样的问题:你有没有解决这个问题?错误的时间对我没有用。 不,我无法解决它,所以我暂时放弃了集成。很快会再试一次。 我也有同样的问题。怎么解决????我的日期时间和时区是正确的。 我遇到了这个问题,问题是时间。我的模拟器时间不对 【参考方案1】:我遇到了同样的问题。事实证明,如果 oAuth 调用上的时间戳不正确,服务器会返回 401 状态错误,这在 Android 设备上会导致抛出“Received authentication challenge is null”异常。出现此问题的所有设备的时间都不正确,修复时间即可解决问题。
也许这也是你的问题?
【讨论】:
oAuth 协议的一部分涉及为每个命令发送时间戳(这可能由您正在使用的类处理)。那里的服务器将时间戳与其当前时间进行比较,如果它不在某个窗口内(对于我正在使用的服务器,它是 300 秒),它将拒绝该命令并返回 401 错误。不幸的是,Android 没有优雅地处理 401 错误(恕我直言,这是一个错误),并引发了您所看到的异常。如果您正确设置时间,问题就会消失。 (请注意,任何其他 oAuth 错误也会产生 401 错误)。 这个答案肯定需要更多可见性! ***.com/questions/20902350/… 仍然面临同样的问题,请帮助我【参考方案2】:我也遇到了同样的问题。首先,我在做getOAuthRequestToken()
时得到它。我的消费者密钥和消费者秘密来自 .properties
文件,结果发现它们有一个尾随空格,因此被 Twitter 的 API 视为无效。
在那之后,我在执行getOAuthAccessToken()
时也得到了相同的 401。在这里,我没有正确地坚持和重建RequestToken
对象。
【讨论】:
你有解决这个问题的办法吗?我使用了 twitter4j-media-support-4.0.4 jar 文件【参考方案3】:当我连续两次调用以下命令时,这发生在我身上:
requestToken = twitter.getOAuthRequestToken();
return requestToken.getAuthorizationURL();
【讨论】:
我遇到了同样的问题...两次是由于用户第一次取消了 oAUTH,然后在第二次返回授权。我们在调用中使用了 twitter.getSingleton “可重用”实例……这不起作用。每次我们都必须使用 ConfigurationBuilder 来创建 twitter 实例【参考方案4】:已修复:即使在我修复了日期和时间之后,我也遇到了这个异常,但是当我在 logcat 中查看 twittherj 发送到服务器的参数时,时间戳仍然是错误的 - 所以我强制关闭了应用程序,之后那个异常就消失了。
【讨论】:
【参考方案5】:我也偶然发现了这个问题。在另一个线程中检查我的解决方案Android: Twitter4J Exception (Received Authentication Challenge Is Null)
【讨论】:
【参考方案6】:我遇到了同样的问题,并通过使用异步任务修复了它 正如我在以下链接中回答的那样 Android Twitter exception error :(
【讨论】:
以上是关于Twitter4J + Android:身份验证挑战为空异常的主要内容,如果未能解决你的问题,请参考以下文章
使用 oauth 和 twitter4j 集成 Android Twitter
使用twitter4j库的Twitter Android登录错误
使用 Android AccountManager Twitter 凭据创建 Twitter4J AccessToken