0

我有两个图像按钮,当我按下它时我想分享/发送推文,但是我在活动中编写所有代码,所以有一天不再工作了我不知道为什么:/它抛出了一个异常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 线程/Main Activity 线程上执行的任何网络活动都会抛出 NetworkOnMainThreadException

一直建议在单独的 AsyncTask 而不是 UI 线程中执行长时间运行的方法调用。从 Internet 获取数据的方法是长期运行方法的一个示例。请阅读有关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 回答