如何在从服务器上存在的文件中读取文本时处理NetworkOnMainThreadException

时间:2012-06-06 13:51:02

标签: android android-intent android-emulator android-widget

我正在尝试从服务器上存在的.txt文件中读取文本时遇到NetworkOnMainThreadException如何解决此问题 提前致谢。

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        TextView tv= new TextView(this);
        TextView tv2 = new TextView(this);



        StringBuilder content = new StringBuilder();


        try {
            URL url = new URL("http://linktomywebsite/textfile.txt");
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
            String str;
            while ((str = in.readLine()) != null) {
                content.append(str +"\n");
                tv.setText(content);
            }
            in.close();
        } catch (MalformedURLException e){
        } catch (IOException e) {
            e.printStackTrace();
        }
        catch (NetworkOnMainThreadException e){

            tv2.setText("not connecting to server");
            setContentView(tv2);
        }

    };        
    }

3 个答案:

答案 0 :(得分:2)

自api 11起,网络操作在ui线程上为forbidden。您可以使用AsyncTask,在doInBackground中请求字符串并在onPostExecute

中显示结果

答案 1 :(得分:0)

创建一个新线程并执行大量操作,例如从中获取数据...... 蚂蚁使用处理程序或异步任务来更新UI上的结果

就像这样 http://www.vogella.com/articles/AndroidPerformance/article.html

答案 2 :(得分:0)

一种解决方案是允许网络操作(尽管不建议这样做)。将以下内容添加到onCreate()。

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