Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Twitter4j-TwitterException(未发现身份验证问题。)_Android_Api_Authentication_Twitter_Integration - Fatal编程技术网

Android Twitter4j-TwitterException(未发现身份验证问题。)

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

我正在制作一个应用程序,它只从android中的特定页面获取推文。我使用的是twitter4j库版本3.0.5。下面是我的代码:

    @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
中演示如何执行此操作吗。