jtwitter中getPublicTimeline的替代方案

3

编辑===========

从MANIFEST.MF文件粘贴:

Main-Class: winterwell.jtwitter.Twitter
Implementation-Version: 2.9.0
Implementation-Title: JTwitter client library by Winterwell


Android Studio 0.2.9
jtwitter 2.9.0

你好,

我一直在跟随Marakana视频学习如何创建Yamba客户端。

然而,我发现jtwitter中的getPublicTimeline API调用已被删除,因为Twitter不再支持它。所以我尝试使用另一种API,但是出现了一个错误,我把它剪切并粘贴在下面。

我尝试的不同API包括getFriendsTimelinegetHomeTimeline

我正在使用的代码片段:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.status);

    edit_status = (EditText)findViewById(R.id.editText);
    tw = new Twitter("student", "password");
    tw.setAPIRootUrl("http://yamba.marakana.com/api");
}

public class GetHomeStatus extends AsyncTask<String, Integer, String>
{
    @Override
    protected String doInBackground(String... statues)
    {
        int i = 0;
        List<winterwell.jtwitter.Status> timeline;

        try {
            timeline = twitter.getFriendsTimeline();
            //twitter.setStatus("Hello, there!");
        }
        catch (TwitterException e) {
            e.printStackTrace();
            return "Failed to get timeline";
        }

我认为后台线程没有问题,因为twitter.setStatus("Hello, there!");可以正常工作。

非常感谢您提出的建议。

异常:

 275-445/system_process W/InputMethodManagerService﹕ Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@4193edb0 attribute=null, token = android.os.BinderProxy@4177e720
09-11 03:58:37.108    3187-3204/com.sunsystems.yambaapp W/System.err﹕ winterwell.jtwitter.TwitterException: 301 Moved Permanently
09-11 03:58:37.108    3187-3204/com.sunsystems.yambaapp W/System.err﹕ HTTP/1.1 301 Moved Permanently https://marakana.com/s/tags/breaking_open/?include_entities=1& -> https://marakana.com/s/tags/breaking_open/?include_entities=1&
09-11 03:58:37.118    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at winterwell.jtwitter.URLConnectionHttpClient.processError(URLConnectionHttpClient.java:513)
09-11 03:58:37.118    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at winterwell.jtwitter.URLConnectionHttpClient.connect(URLConnectionHttpClient.java:155)
09-11 03:58:37.118    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at winterwell.jtwitter.URLConnectionHttpClient.getPage2(URLConnectionHttpClient.java:311)
09-11 03:58:37.118    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at winterwell.jtwitter.URLConnectionHttpClient.getPage(URLConnectionHttpClient.java:251)
09-11 03:58:37.118    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at winterwell.jtwitter.Twitter.getStatuses(Twitter.java:1660)
09-11 03:58:37.118    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at winterwell.jtwitter.Twitter.getHomeTimeline(Twitter.java:1162)
09-11 03:58:37.118    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at winterwell.jtwitter.Twitter.getFriendsTimeline(Twitter.java:1153)
09-11 03:58:37.118    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at com.sunsystems.yambaapp.UpdateService$GetHomeStatus.doInBackground(UpdateService.java:70)
09-11 03:58:37.118    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at com.sunsystems.yambaapp.UpdateService$GetHomeStatus.doInBackground(UpdateService.java:61)
09-11 03:58:37.128    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-11 03:58:37.128    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:234)
09-11 03:58:37.128    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-11 03:58:37.128    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
09-11 03:58:37.128    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
09-11 03:58:37.128    3187-3204/com.sunsystems.yambaapp W/System.err﹕ at java.lang.Thread.run(Thread.java:841)

你是否正在使用Twitter#setApiRoot(String)?如果是,你传递的参数URL是什么? - Vikram
@user2558882 我应该展示为 tw.setAPIRootUrl("http://yamba.marakana.com/api"); 我现在已经编辑了我的问题,并附上了更新后的代码片段。谢谢。 - ant2009
jtwitter 2.9.0: 我认为你没有使用它。看起来你正在使用基于 JTwitterJTwitterYamba 库。我建议你从这里下载库:链接。将 jar 文件添加到你的项目中。删除 JTwitterYamba 的依赖并重试。使用你提供的细节时,我没有看到发布的异常。 - Vikram
@user2558882,我一直在使用2.9.0版本,并从您指定的链接重新下载了它以确保。我已经在我的问题中粘贴了清单细节。然而,问题不在于发布消息,因为我可以正常执行该操作。问题在于使用getHomeTimeline()。getPublicTimeline()已经过时了。谢谢。 - ant2009
2个回答

6

我使用JTwitter 2.9.0能够重现上述异常。我之前提出建议的原因是:

List<winterwell.jtwitter.Status> timeline;

我使用的是修改过的JTwitter库:JTwitterYamba。该库不包含winterwell.jtwitter.Status。相反,Status是在winterwell.jtwitter.Twitter中定义的内部类,使得其完全限定路径为:winterwell.jtwitter.Twitter.Status

List<winterwell.jtwitter.Twitter.Status> timeline;

所以,我建议的并不是要删除 JTwitter jar 并添加 JTwitterYamba jar,而是恰好相反。抱歉给你造成困惑。

问题:

这两个库都对 Twitter.getFriendsTimeline() 方法有不同的实现。以下是 JTwitterYamba 的处理方式:

public List<Status> getFriendsTimeline() throws TwitterException {

    // Take note of the URL suffix: /statuses/friends_timeline.json
    return getStatuses(TWITTER_URL + "/statuses/friends_timeline.json",
        standardishParameters(), true);
}

这里是 JTwitter 的功能:

@Deprecated
public List<Status> getFriendsTimeline() throws TwitterException {
    return getHomeTimeline();
}


public List<Status> getHomeTimeline() throws TwitterException {
    assert http.canAuthenticate();

    // The URL isn't the same
    return getStatuses(TWITTER_URL + "/statuses/home_timeline.json",
                         standardishParameters(), true);
}

你可以这样做来解决问题:
你可以从项目中移除JTwitter,并添加JTwitterYamba jar:链接。你需要将winterwell.jtwitter.Status改成winterwell.jtwitter.Twitter.Status
或者,你可以检查是否允许并且可以修改库文件。在Twitter.getStatuses方法中添加一个使用TWITTER_URL + "/statuses/friends_timeline.json"作为参数的公共方法。

3

Marakana被Twitter收购后,将重定向到thenewcircle

根据this page的说法,有两件事情需要尝试...

通过右键单击您的项目,选择属性并转到Java构建路径,从apk中获取.jar。在那里,转到“顺序和导出”选项卡,并检查jtwiiter-yamba.jar。还要删除这些硬编码行。

// twitter = new Twitter("student", "password");
// twitter.setAPIRootUrl("http://yamba.marakana.com/api");

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