我按照“学习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;
}
}
可能是什么问题?如何使它工作?
答案 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的