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

新しいスレッドを作成し、そこからデータを取得するなどの重い操作を実行します......ハンドラーまたは非同期タスクを使用してUIの結果を更新します

この http://www.vogella.com/articles/AndroidPerformance/article.htmlのように

于 2012-06-06T13:53:06.717 に答える
0

1つの解決策は、ネットワーク操作を許可することです(ただし、許可することはお勧めできません)。これをonCreate()の下に追加します。

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