1

我已经在模拟器上的应用程序中使用 twitter 实现了一些操作,但在实际设备上,我有一个例外:

android.os.NetworkOnMainThreadException

我已经阅读了该错误,这是因为我需要在主要操作之外执行一个线程,但不明白如何调用函数 asyncsTask,因为我需要发送共享首选项作为参数。--------------------- 我需要将函数 isAuthenticated 或他的代码的一部分放在 AsyncTask 中,但需要发送首选项作为参数,我不知道该怎么做

我放了一部分代码。

来电

if (TwitterUtils.isAuthenticated(prefs)) {   
......
.....
....
}

在类 TwitterUtils.java

公共静态布尔isAuthenticated(SharedPreferences首选项){

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;
}     

有什么解决办法吗?

谢谢

4

3 回答 3

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);
于 2012-08-21T10:35:30.797 回答
0

当您调用 twitter.getAccountSettings() 时,此方法会发出网络请求,并且与所有请求一样,它必须在线程上完成。您需要传递 sharedpreferences 的事实不会改变任何事情。

要将一些参数传递给 AsyncTask,必须像这样抛出方法 execute(): new DownloadFilesTask().execute(url1, url2, url3);

更多信息在这里:http: //developer.android.com/reference/android/os/AsyncTask.html

于 2012-08-21T10:29:47.167 回答
0

尝试使用Asynac 任务来避免这种情况。看看这个。它会回答你的问题。

于 2012-08-21T10:32:10.970 回答