我已经在模拟器上的应用程序中使用twitter实现了一些操作,但是在实际设备上,我有一个例外:
android.os.NetworkOnMainThreadException
我已经读过这个错误,因为我需要从主操作中做一个线程,但是不了解如何调用函数asyncsTask,因为我需要发送Shared Preferences作为参数。 --------------------- 我需要把函数isAuthenticated或他的代码的一部分放在AsyncTask中但需要发送prefs作为参数而我不是如何做到的
我放了一部分代码。
HERE CALL
if (TwitterUtils.isAuthenticated(prefs)) {
......
.....
....
}
IN CLASS TwitterUtils.java
public static boolean isAuthenticated(SharedPreferences prefs){
String token = prefs.getString(OAuth.OAUTH_TOKEN, "");
String secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");
AccessToken a = new AccessToken(token,secret);
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET);
twitter.setOAuthAccessToken(a);
try {
twitter.getAccountSettings(); **LINE ERROR**
return true;
} catch (TwitterException e) {
e.printStackTrace();
return false;
}
任何解决方案?
由于
答案 0 :(得分:3)
替换您的代码:
if (TwitterUtils.isAuthenticated(prefs)) {
......
.....
....
}
以下内容:
new AsyncTask<SharedPreferences,Object, Boolean>() {
@Override
protected Boolean doInBackground(SharedPreferences... params) {
return TwitterUtils.isAuthenticated(params[0]);
}
@Override
protected void onPostExecute(Boolean isAuthenticated) {
if (isAuthenticated) {
// Do processing after successful authentication
}
else {
// Do processing after authentication failure
}
}
}.execute(prefs);
答案 1 :(得分:0)
当你调用twitter.getAccountSettings()时,这个方法发出网络请求,就像所有请求一样,它必须在一个线程上完成。您需要传递共享首选项的事实不会改变任何内容。
要将一些参数传递给AsyncTask,必须完成抛出方法execute(),如下所示: new DownloadFilesTask()。execute(url1,url2,url3);
此处提供更多信息:http://developer.android.com/reference/android/os/AsyncTask.html
答案 2 :(得分:0)
尝试使用Asynac tasks来避免这种情况。 检查this out.it将回答您的问题。