Android Twitter 4j集成获取推文实体

4
我正在使用Twitter4j在Android上进行Twitter集成。我正在尝试获取主页时间线,而且这部分已经正常工作。但是当我想要获取推文中包含的URL时,就没有相应的函数。是否有一个函数可以获取推文实体,例如URL等。
以下是代码:
cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true).setOAuthConsumerKey(Constants.CONSUMER_KEY)
            .setOAuthConsumerSecret(Constants.CONSUMER_SECRET)
            .setOAuthAccessToken(accessToken).setOAuthAccessTokenSecret(
                    accessSecret);

    try {
        TwitterFactory factory = new TwitterFactory(cb.build());
        // gets Twitter instance with default credentials
        Twitter twitter = factory.getInstance();
        User user = twitter.verifyCredentials();
        List<Status> statuses = twitter.getHomeTimeline();
        System.out.println("Showing @" + user.getScreenName() + "'s home timeline.");
        for (Status status : statuses) {

            System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText() + "--"+status.getURLs()+ "--"+status.getURLEntities());
        }
    } catch (TwitterException te) {
        te.printStackTrace();
        System.out.println("Failed to get timeline: " + te.getMessage());
        System.exit(-1);
    }

这段代码在与Sony的代码一起使用时表现良好,但是当我将自己的代码移动到异步任务中时出现了一些错误。

下面是我编辑后的代码:

        protected String doInBackground(Void... args) {
        String response = null;

        try {
            TwitterFactory factory = new TwitterFactory(cb.build());
            // gets Twitter instance with default credentials
            Twitter twitter = factory.getInstance();
            User user = twitter.verifyCredentials();
            ResponseList<Status> statuses = twitter.getHomeTimeline();


            System.out.println("Showing @" + user.getScreenName() + "'s home timeline.");
            for (Status status : statuses) {

                System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText() + "--"+status.getUser().getProfileImageURL());
                URLEntity[] uent = status.getURLEntities();
                if (uent != null) {
                    for (int k = 0; k < uent.length; k++) {
                        Log.i("URL Entity", "Dp Url " + uent[k].getDisplayURL()
                                + " URL " + uent[k].getURL() + " start "
                                + uent[k].getStart() + " end "
                                + uent[k].getEnd());
                    }
}
            }

        } catch (TwitterException te) {
            te.printStackTrace();
            System.out.println("Failed to get timeline: " + te.getMessage());
            System.exit(-1);
        }
        return response;
    }

twitter.getHomeTimeline(); 出现错误:类型不匹配:无法将 ResponseList<Status> 转换为 ResponseList<AsyncTask.Status>。 - i leaf
好的,请转到以下代码行:ResponseList<Status> statuses = twitter.getHomeTimeline(); 并将光标放在 Status 上,然后将其更改为 twitter4j - MKJParekh
响应列表<twitter4j.Status> statuses = twitter.getHomeTimeline(); - MKJParekh
太好了。它能正常工作。我没有注意到那个。 - i leaf
1个回答

2

在创建ConfigurationBuilder对象时,您只需要添加一行代码:

cb.setIncludeEntitiesEnabled(true);

下面的代码提示)这样您就可以获取到实体了。

ResponseList<Status> list = twitter.getHomeTimeline();
URLEntity[] uent = list.get(0).getURLEntities();
if (uent != null) {
                    for (int k = 0; k < uent.length; k++) {
                        Log.i("URL Entity", "Dp Url " + uent[k].getDisplayURL()
                                + " URL " + uent[k].getURL() + " start "
                                + uent[k].getStart() + " end "
                                + uent[k].getEnd());
                    }
}

谢谢。但是当我将我的代码移动到异步任务doInBackground中时,会出现一些错误。 - i leaf
检查一下你是否在进行任何UI操作?如果有困扰,可以另外提问。 - MKJParekh
你能帮我使用Twitter 4j Android获取上传的图片吗?有什么函数可以用吗? - i leaf
我还没有上传图片到Twitter,但是在SO上已经有很多关于同样问题的好答案了。如果你仍然遇到问题,可以描述并提问 :) - MKJParekh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接