0

我在尝试从服务器上存在的 .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);
        }

    };        
    }
4

3 回答 3

2

从 api 11 开始禁止在 ui 线程上进行网络操作。您可以使用AsyncTask,请求字符串doInBackground并显示结果onPostExecute

于 2012-06-06T13:57:03.853 回答
0

一种解决方案是允许网络操作(尽管不建议这样做)。在 onCreate() 下面添加这个。

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
于 2013-02-07T08:41:08.617 回答
0

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

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

于 2012-06-06T13:53:06.717 回答