【发布时间】:2014-06-19 12:32:17
【问题描述】:
我按照“Learning Android”一书中的指南构建了一个类似 Twitter 的应用程序。
首先,我使用 jtwitter.jar 作为库。当向服务器发送新状态时,应用程序写了“失败”,但该消息出现在服务器页面上。今天我做了一些重构(将通用功能引入应用程序类并添加服务),之后我得到了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;
}
}
可能是什么问题?如何让它发挥作用?
【问题讨论】: