【问题标题】:Twitter update status推特更新状态
【发布时间】:2011-06-19 04:53:46
【问题描述】:

我正在通过 twitter4j 将 Twitter 集成到 Android。我可以成功阅读我发布的推文。

现在我正在尝试从中发布推文,但我不能。我收到如下奇怪的警告:

    02-01 16:28:43.298: WARN/System.err(729): 401:Authentication credentials were missing or incorrect.
02-01 16:28:43.308: WARN/System.err(729): {"request":"\/1\/statuses\/update.json","error":"Read-only application cannot POST"}
02-01 16:28:43.308: WARN/System.err(729): TwitterException{exceptionCode=[15bb6564-00e54a7f], statusCode=401, retryAfter=0, rateLimitStatus=null, version=2.1.7-SNAPSHOT(build: fd76317d18a608269f0566f73bbb827420c4c77e)}
02-01 16:28:43.308: WARN/System.err(729):     at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:309)
02-01 16:28:43.318: WARN/System.err(729):     at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:72)
02-01 16:28:43.318: WARN/System.err(729):     at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:103)
02-01 16:28:43.318: WARN/System.err(729):     at twitter4j.Twitter.updateStatus(Twitter.java:501)
02-01 16:28:43.330: WARN/System.err(729):     at com.T4J_OAuth.activities.Main$1.onClick(Main.java:69)
02-01 16:28:43.330: WARN/System.err(729):     at android.view.View.performClick(View.java:2364)
02-01 16:28:43.330: WARN/System.err(729):     at android.view.View.onTouchEvent(View.java:4179)
02-01 16:28:43.339: WARN/System.err(729):     at android.widget.TextView.onTouchEvent(TextView.java:6541)
02-01 16:28:43.339: WARN/System.err(729):     at android.view.View.dispatchTouchEvent(View.java:3709)
02-01 16:28:43.339: WARN/System.err(729):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-01 16:28:43.349: WARN/System.err(729):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-01 16:28:43.349: WARN/System.err(729):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-01 16:28:43.349: WARN/System.err(729):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-01 16:28:43.359: WARN/System.err(729):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
02-01 16:28:43.359: WARN/System.err(729):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
02-01 16:28:43.359: WARN/System.err(729):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
02-01 16:28:43.369: WARN/System.err(729):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
02-01 16:28:43.369: WARN/System.err(729):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
02-01 16:28:43.378: WARN/System.err(729):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-01 16:28:43.378: WARN/System.err(729):     at android.os.Looper.loop(Looper.java:123)
02-01 16:28:43.378: WARN/System.err(729):     at android.app.ActivityThread.main(ActivityThread.java:4363)
02-01 16:28:43.378: WARN/System.err(729):     at java.lang.reflect.Method.invokeNative(Native Method)
02-01 16:28:43.389: WARN/System.err(729):     at java.lang.reflect.Method.invoke(Method.java:521)
02-01 16:28:43.389: WARN/System.err(729):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-01 16:28:43.398: WARN/System.err(729):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-01 16:28:43.398: WARN/System.err(729):     at dalvik.system.NativeStart.main(Native Method)

虽然我在 Twitter 中将我的应用程序设置为可读写,但它说我不能通过只读应用程序发帖。

【问题讨论】:

  • 请同时发布代码。我怀疑您是否正确创建了 AccessToken

标签: android twitter integration


【解决方案1】:

在 Twitter 上发布推文与获取时间线不同。

考虑到 Twitter4J 的情况可能如下:

它要求你有一个经过授权的Twitter 类的实例。

您执行以下操作以获得时间线:

Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(consumerKey, consumerSecret);
RequestToken requestToken = twitter.getOAuthRequestToken(CALLBACKURL); 
...
...

OAuth 验证成功后,您将获得oauth_verifier 变量,然后使用以下行创建AccessToken

AccessToken accessToken = twitter.getOAuthAccessToken(requestToken,oauth_verifier);
String token = accessToken.getToken(), 
      secret = accessToken.getTokenSecret();

将上面的tokensecret保存在某处,以后生成AccessToken时会用到。

现在,更新状态的代码:

AccessToken accessToken = new AccessToken(token,secret);
Twitter twitter = new TwitterFactory().getOAuthAuthorizedInstance(consumerKey,consumerSecret,accessToken);
Status status = twitter.updateStatus("My First Status Update");
statusId = (int)status.getId();

这会将消息My First Status Update 更新到您的时间线,并将在statusId 变量中获得此状态的ID

有关如何使用 OAuth 实现通过 twitter 登录并获取时间线的第一条推文的工作示例,请单击 this 链接到我的博客文章。

相信只要稍加修改并使用上面的代码,你也可以将其转换为推文发布代码!

【讨论】:

  • shikh 谢谢...但它现在创建了一个新问题。编辑您的代码后,我可以发布推文,但现在没有登录 oage 并使用按钮和编辑框来指导我的主布局当我发布推文时,它也发布了。你认为它对应用程序的 ri8 行为吗?
  • 这是正确的行为。该应用程序存储凭据并在您每次启动应用程序时使用它们。直到其中一种情况发生:a)用户撤销对您的应用程序的权限,b)您使用您的应用程序退出 twitter
  • ok...thnx.so 这意味着一旦我登录 ti 将保存我的凭据,直到我通过应用程序注销
  • 是的,要么通过应用程序,要么您从 twitter.com 撤消权限
  • @SheikhAman 我想显示弹出对话框(更新推特状态),其中包含编辑文本、取消按钮和更新状态按钮,用户可以在 EditText 中输入文本并单击更新状态按钮后他的状态将被更新,并且应该在更新他的状态后给我一个回应......你有没有像这样实施??????或者是否有可能实现这个?在安卓中
【解决方案2】:
try {
    AccessToken accessToken = new AccessToken(token,secret);
    Twitter twitter = new TwitterFactory().getOAuthAuthorizedInstance(consumerKey,consumerSecret,accessToken);
    shareText= edttweetnow.getText().toString();
    status = twitter.updateStatus(shareText);
    int statusId = (int)status.getId();

    Toast.makeText(TweetLoad.this, "Tweet Successfull", Toast.LENGTH_LONG).show();

} catch (TwitterException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Toast.makeText(TweetLoad.this, e.toString(), Toast.LENGTH_LONG).show();
}

共享文本是存储编辑文本数据的字符串。 TweetLoad 是当前类名。 去做吧

【讨论】:

    【解决方案3】:

    第一行说: 02-01 16:28:43.298: WARN/System.err(729): 401: 身份验证凭据丢失或不正确。

    要么您根本没有登录,要么使用了错误的凭据。 使用 oAuth 登录 Twitter 不再简单。但是,当您已经注册了您的应用时,您应该拥有可以使用的消费者令牌 + 秘密。

    查看twitter 4j docs 示例代码或Zwitscher 源代码,用于使用 twitter4j 与 Twitter 进行通信的 Android 应用程序。

    【讨论】:

    • thanx heiko 但我用同样的方法来获取推文并且它有效,所以我认为这不是问题。凭证或消费者令牌
    • 有一些请求,例如不需要身份验证的公共时间线 - 请参阅 twitter4j.org 上的矩阵 - twitter4j.org/en/api-support.html
    猜你喜欢
    • 2011-12-05
    • 2014-08-27
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多