您好我正在通过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读写,但它说我可以通过只读应用程序来设置。
请帮我解决一下
答案 0 :(得分:4)
在推特上发布推文与获取时间表不同。
将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();
将上述token
和secret
保存在某处,稍后将用于生成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
更新为您的时间轴,并会在ID
变量中获得此状态的statusId
。
有关如何使用OAuth实现与Twitter登录并获取时间轴第一条推文的工作示例,请点击this链接到我的博文。
我确信在对其进行略微修改并使用上述代码后,您可以将其转换为推文发布代码!
答案 1 :(得分:1)
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
是当前的类名。
做它
答案 2 :(得分:0)
第一行说: 02-01 16:28:43.298:WARN / System.err(729):401:验证凭据丢失或不正确。
您根本没有登录或使用错误的凭据。 使用oAuth登录Twitter并不是一件轻而易举的事。但是,当您已经注册了应用程序时,您应该使用消费者令牌+机密。
请查看twitter 4j docs示例代码或使用twitter4j与Twitter通信的Android应用的Zwitscher源代码。