0

画像ボタンが2つあり、押したときに共有/ツイートしたいのですが、すべてのコードをアクティビティで実行していたため、ある日が機能しなくなった理由がわかりません:/例外がスローされていましたNetworkOnMainThreadExceptionが発生し、AsyncTaskですべてを実行するのに間に合いました。それ以来、私はしばらく探していましたが、これについてテストしたすべての解決策が機能しません...だから私はあなたがこの問題で私を助けて欲しいです:D

class TweetTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            try {
                AccessToken accessToken = loadAccessToken();
                if (accessToken == null) {
                    twitterL = new TwitterFactory().getInstance();
                    twitterL.setOAuthConsumer(consumerKey, consumerSecret);
                    RequestToken requestToken = twitterL
                            .getOAuthRequestToken(CALLBACKURL);
                    String url = requestToken.getAuthenticationURL();
                    Intent it = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    it.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                    startActivity(it);
                    saveRequestData(requestToken.getToken(),
                            requestToken.getTokenSecret());
                } else {
                    twitterL.setOAuthAccessToken(accessToken);
                    if (loadAccessToken() != null) {
                        String tweet = "I'm listening ";
                        twitterL.updateStatus(tweet);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
                showToast(e.getMessage());
            }

            return "1";
        }

        @Override
        protected void onPostExecute(String tweet) {

        }
    }
4

2 に答える 2

1

Android Honeycomb 以降、UI スレッド/メイン アクティビティ スレッドで実行されるネットワーク アクティビティは、NetworkOnMainThreadException をスローします。

UI スレッドではなく、別の AsyncTask で実行時間の長いメソッド呼び出しを実行することが常に推奨されてきました。インターネットからデータを取得するメソッドは、長時間実行されるメソッドの一例です。AsyncTaskの詳細を読み、コードに実装して、この例外がスローされないようにしてください。

于 2012-09-27T12:51:10.917 に答える
0

あなたができることは、ネットワークが呼び出す前にこれを追加することです:

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

そして、メインスレッドでそれを許可します。ただし、これは非常に単純なネットワーク呼び出しに対してのみ行ってください。そして、私は本当に単純なことを意味します。

zeiger が言ったように、AsyncTaskについて学び、この状況で使用する必要があります。

于 2012-09-27T13:00:22.550 に答える