Yamba - 301永久移动https://twitter.com/statuses/update.json

时间:2013-12-30 00:13:34

标签: android twitter

我按照“学习Android”一书中的指南来构建类似Twitter的应用程序。 首先,我使用jtwitter.jar作为库。当向服务器发送新状态时,应用程序写入“失败”,但消息显示在服务器页面上。今天我进行了一些重构(将常用功能引入Application类并添加服务),之后我得到了301 Moved Permanently https://twitter.com/statuses/update.json -> https://twitter.com/statuses/update.json。在this建议后,我尝试使用jtwitter-yamba.jar。错误的文本有点改变(下面),但似乎仍然是相同的。

E/StatusActivity﹕ winterwell.jtwitter.TwitterException: 301 Moved Permanently https://twitter.com/statuses/update.json
W/System.err﹕ winterwell.jtwitter.TwitterException: 301 Moved Permanently https://twitter.com/statuses/update.json
W/System.err﹕ at winterwell.jtwitter.URLConnectionHttpClient.processError(URLConnectionHttpClient.java:155)
W/System.err﹕ at winterwell.jtwitter.URLConnectionHttpClient.post(URLConnectionHttpClient.java:219)
W/System.err﹕ at winterwell.jtwitter.Twitter.post(Twitter.java:1944)
W/System.err﹕ at winterwell.jtwitter.Twitter.updateStatus(Twitter.java:2555)
W/System.err﹕ at winterwell.jtwitter.Twitter.updateStatus(Twitter.java:2502)
W/System.err﹕ at org.my.yamba.StatusActivity$PostToTwitter.doInBackground(StatusActivity.java:93)
W/System.err﹕ at org.my.yamba.StatusActivity$PostToTwitter.doInBackground(StatusActivity.java:88)
W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:287)
W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:234)
W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
W/System.err﹕ at java.lang.Thread.run(Thread.java:841)

导致错误的代码:

Twitter.Status status = ((YambaApplication) getApplication())
                        .getTwitter().updateStatus(statuses[0]);

其中YambaApplication是一个新的Application类:

import android.app.Application;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.Log;
import winterwell.jtwitter.Twitter;

public class YambaApplication extends Application implements OnSharedPreferenceChangeListener{

    private static final String TAG = YambaApplication.class.getSimpleName();
    public Twitter twitter;
    private SharedPreferences prefs;
    @Override
    public void onCreate() {
        super.onCreate();
        this.prefs = PreferenceManager.getDefaultSharedPreferences(this);
        this.prefs.registerOnSharedPreferenceChangeListener(this);
        Log.i(TAG, "onCreated");
    }
    @Override
    public void onTerminate() {
        super.onTerminate();
        Log.i(TAG, "onTerminated");
    }
    public synchronized Twitter getTwitter() {
        if (this.twitter == null) {
            String username = this.prefs.getString("username", "");
            String password = this.prefs.getString("password", "");
            String apiRoot = prefs.getString("apiRoot",
                    "http://yamba.marakana.com/api");
            if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)
                    && !TextUtils.isEmpty(apiRoot)) {
                this.twitter = new Twitter(username, password);
                this.twitter.setAPIRootUrl(apiRoot);
            }
        }
        return this.twitter;
    }
    public synchronized void onSharedPreferenceChanged(
            SharedPreferences sharedPreferences, String key) {
        this.twitter = null;
    }
}

可能是什么问题?如何使它工作?

1 个答案:

答案 0 :(得分:0)

在以下文章中,您将解释为何会发生这种情况:Authorization error with jTwitter for android

我迟到了这些帖子 - 我总是忙着阅读,然后我不得不说我将推特库版本改为最新版本直到现在(3.0.1)。看来,当你这样做时,错误并没有发生,应用程序运行良好。

您可以在此处下载最后一个:http://www.winterwell.com/software/jtwitter.php

注意:我建议您下载ZIP并对jTwitter的libs文件夹中的jar进行libs引用 - 它应该一次性工作。

Yamba应用程序的第二个版本。您可以使用GitHub更改代码或尝试使用以前代码保留的建议(第1版):https://github.com/learning-android

就我个人而言,我不知道为什么Marko对Android新人来说不那么容易,他应该在项目的后期添加依赖项。好消息是我已经学会了他们所解释的东西:)

热烈的问候,

Leandro的