1

エミュレーターのアプリケーションでtwitterを使用していくつかの操作を実装しましたが、実際のデバイスでは例外があります。

android.os.NetworkOnMainThreadException

そのエラーについて読みました。これは、メインアクションからスレッドを実行する必要があるためですが、共有設定をパラメーターとして送信する必要があるため、関数asyncsTaskを呼び出す方法がわかりません。---------------------関数isAuthenticatedまたは彼のコードの一部をAsyncTaskに配置する必要がありますが、パラメーターとして設定を送信する必要があります。

コードの一部を入れました。

こちらからお電話ください

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

クラス内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;
}     

解決策はありますか?

ありがとう

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()をスローする必要があります。newDownloadFilesTask()。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 に答える