1

このコードを使用して、htmlページからデータを読み取り、webviewに入れます

public class MainActivity extends Activity {
public WebView objwebview ;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    objwebview = (WebView)findViewById(R.id.webView1);
          HttpClient client = new DefaultHttpClient();
          HttpGet request = new HttpGet("http://www.google.com");
          try
          {
              HttpResponse response = client.execute(request);
              BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
              String line;
              StringBuilder str = new StringBuilder();
              while((line = reader.readLine()) != null) {
                  str.append(line);
          }
              objwebview.loadData(str.toString(), "text/html", "UTF-8");
      }
      catch(Exception e)
      {
          e.printStackTrace();
          objwebview.loadData(e.toString(), "text/html", "UTF-8");
      }

しかし、それを実行すると、このエラー (「android.os.networkonmainthreadexception」) が発生します。どうすれば修正できますか?

4

2 に答える 2

3

Androidのメイン スレッドでネットワーク コードを実行しています。これを読んで、問題に対する部分的な答えを見つけてください。

基本的な考え方は、すぐには戻らない同期読み取り (つまり、ネットワーク操作などの時間がかかるもの) を実行する場合は、別のスレッドで実行し、結果を GUI に返す必要があるというものです。

これを行うには、いくつかのオプションがあります。AsyncTask更新を簡単に UI に公開できる を使用するServiceか、関連する通信とともにバックグラウンドを使用できます (AIDL またはより単純なメッセージとハンドラーを介して)。

于 2012-12-07T18:51:12.980 に答える
2

メインスレッドでネットワーク接続にアクセスしています。次の行を setContentView(your_layout); の下に貼り付けます。

// Allow network access in the main thread
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
于 2013-10-03T13:33:09.260 に答える