Android Twitter4j-TwitterException(未发现身份验证问题。)
我正在制作一个应用程序,它只从android中的特定页面获取推文。我使用的是twitter4j库版本3.0.5。下面是我的代码:Android Twitter4j-TwitterException(未发现身份验证问题。),android,api,authentication,twitter,integration,Android,Api,Authentication,Twitter,Integration,我正在制作一个应用程序,它只从android中的特定页面获取推文。我使用的是twitter4j库版本3.0.5。下面是我的代码: @Override protected String doInBackground(String... credentials) { // TODO Auto-generated method stub oAuth_ConsumerKey = credentials[0]; oAuth_ConsumerS
@Override
protected String doInBackground(String... credentials) {
// TODO Auto-generated method stub
oAuth_ConsumerKey = credentials[0];
oAuth_ConsumerSecret = credentials[1];
accessToken = credentials[2];
accessTokenSecret = credentials[3];
System.out.println("Credentials -------- " + oAuth_ConsumerKey
+ "\n" + oAuth_ConsumerSecret + "\n" + accessToken + "\n"
+ accessTokenSecret);
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(oAuth_ConsumerKey)
.setOAuthConsumerSecret(accessTokenSecret);
builder.setOAuthAccessToken(accessToken);
builder.setOAuthAccessTokenSecret(accessTokenSecret);
TwitterFactory twitterFactory = new TwitterFactory(builder.build());
Twitter twitter = twitterFactory.getInstance();
try {
List<twitter4j.Status> statuses;
String user = "@pagename";
statuses = twitter.getUserTimeline(user);
for (int i = 0; i < statuses.size(); i++) {
twitter4j.Status status = statuses.get(i);
Log.i("Tweet Count " + (i + 1), status.getText() + "\n\n");
}
} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@覆盖
受保护的字符串doInBackground(字符串…凭据){
//TODO自动生成的方法存根
oAuth_ConsumerKey=凭证[0];
oAuth_ConsumerCret=凭证[1];
accessToken=凭证[2];
accessTokenSecret=凭证[3];
System.out.println(“凭证----”+oAuth\u ConsumerKey
+“\n”+oAuth\u ConsumerCret+“\n”+accessToken+”\n”
+密码);
ConfigurationBuilder=新的ConfigurationBuilder();
builder.setOAuthConsumerKey(oAuth_ConsumerKey)
.SetOAuthConsumerCret(accessTokenSecret);
builder.setOAuthAccessToken(accessToken);
setOAuthAccessTokenSecret(accessTokenSecret);
TwitterFactory TwitterFactory=新的TwitterFactory(builder.build());
Twitter=twitterFactory.getInstance();
试一试{
列出状态;
字符串user=“@pagename”;
status=twitter.getUserTimeline(用户);
对于(int i=0;i
(上面的代码是在AsyncTask
的doInBackground
方法中完成的。我想您应该知道)
我得到一个错误,说:找不到身份验证挑战。相关讨论可在以下网站上找到:…
我看过以前的帖子,上面说要检查我的日期和时间。我这样做了,他们都是正确的,并设置为自动。(因为我的互联网连接速度很慢)我还尝试在更快的互联网连接上运行它。我现在认为我的代码有问题
我刚开始将twitter集成到我的android应用程序中,因此解释性指导和答案也会很有帮助
谢谢…Twitter4j采用singletone,并保持其登录/身份验证状态,每次尝试登录/身份验证时都会引发异常 您需要做的是将身份验证登录与其他API调用分开。在您的情况下,您需要以下内容:
private Twitter mTwitter;
private void login(String[] credentials){
String oAuth_ConsumerKey = credentials[0];
String oAuth_ConsumerSecret = credentials[1];
String accessToken = credentials[2];
String accessTokenSecret = credentials[3];
System.out.println("Credentials -------- " + oAuth_ConsumerKey
+ "\n" + oAuth_ConsumerSecret + "\n" + accessToken + "\n"
+ accessTokenSecret);
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(oAuth_ConsumerKey)
.setOAuthConsumerSecret(accessTokenSecret);
builder.setOAuthAccessToken(accessToken);
builder.setOAuthAccessTokenSecret(accessTokenSecret);
TwitterFactory twitterFactory = new TwitterFactory(builder.build());
mTwitter = twitterFactory.getInstance();
}
private List<Status> getTimeLine(){
List<twitter4j.Status> statuses = null;
try {
String user = "@pagename";
statuses = mTwitter.getUserTimeline(user);
for (int i = 0; i < statuses.size(); i++) {
twitter4j.Status status = statuses.get(i);
Log.i("Tweet Count " + (i + 1), status.getText() + "\n\n");
}
} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return statuses;
私人推特mTwitter;
私有无效登录(字符串[]凭据){
字符串oAuth_ConsumerKey=credentials[0];
字符串oAuth_ConsumerSecret=credentials[1];
字符串accessToken=凭证[2];
String accessTokenSecret=凭证[3];
System.out.println(“凭证----”+oAuth\u ConsumerKey
+“\n”+oAuth\u ConsumerCret+“\n”+accessToken+”\n”
+密码);
ConfigurationBuilder=新的ConfigurationBuilder();
builder.setOAuthConsumerKey(oAuth_ConsumerKey)
.SetOAuthConsumerCret(accessTokenSecret);
builder.setOAuthAccessToken(accessToken);
setOAuthAccessTokenSecret(accessTokenSecret);
TwitterFactory TwitterFactory=新的TwitterFactory(builder.build());
mTwitter=twitterFactory.getInstance();
}
私有列表getTimeLine(){
列表状态=空;
试一试{
字符串user=“@pagename”;
status=mTwitter.getUserTimeline(用户);
对于(int i=0;i
}
确保每次运行时都从后台线程调用这两个方法,并调用login一次。可能重复的是,就引发的异常而言,这是众多问题的重复。我的问题的不同之处在于,我并没有试图在twitter页面上发布任何东西。我只是要求我得到推特。其次,我是twitter整合的新手,正如我前面所说的,我尝试过其他帖子推荐的东西。根据你对这个问题的链接,我们的代码有不同的目的,做不同的事情。不过还是要感谢您的通知。我在
getTimeline(){Twitter Twitter=twitterFactory.getInstance();
中收到一个android lint错误(代码下面的红线),表示无法将其解析为类型。(在twitterFactory.getInstance()下面)很抱歉,您必须保留Twitter对象的引用,而不是再次请求它,我已经修改了代码。嗨,我仍然收到相同的错误。您可以在doInBackground
中的AsyncTask
中演示如何执行此操作吗。