2016-12-27 48 views
0

私は今、しばらくの間、HtmlコードをStringに変換する最も簡単な方法を探してきました。私はそれを取り出す必要があるので、私は自分のプロジェクトで前進することができます。 OkHttpを使用してhtmlソースをStringに取得する方法 - Android

は、私が試した:

OkHttpClient client = new OkHttpClient(); 

String run(String url) throws IOException { 
    Request request = new Request.Builder() 
      .url(url) 
      .build(); 

    Response response = client.newCall(request).execute(); 
    return response.body().string(); 
} 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    text = (TextView) findViewById(R.id.text); 

    String html= null; 
    try { 
     html = run("http://google.com"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    text.setText(html); 
} 

}

が、私はエラーandroid.os.NetworkOnMainThreadExceptionを得ました。

Androidスタジオで開発を始めたばかりで、Javaのエキスパートでもありません。誰かが私が何をする必要があるのか​​を説明したいと思っています。事前にありがとう

+1

あなたは、現在のスレッド上の要求を実行しようとしている、 ')('実行呼んでいます。そのスレッドはメインのアプリケーションスレッドであるように見えるので、クラッシュします。 'execute()'ではなく 'enqueue()'を使って、OkHttpがバックグラウンドスレッドでHTTPリクエストを実行できるようにします。 – CommonsWare

+0

誰かが助けて、これがなぜ機能しないのかを書いてもいいですか? http://stackoverflow.com/a/41351476/7313961 – JuliusCezarus

答えて

0

バックグラウンドスレッドでネットワーク操作を行う必要があります。それ以外の場合は、例外が発生します。 Androidの場合はネットワークコールに時間がかかり、UIスレッドがフリーズするため必須です。 @CommonsWareと@christianは、すでに述べたように

https://github.com/square/okhttp/wiki/Recipes#asynchronous-gethttps://stackoverflow.com/a/6343299/1947419

+0

ありがとうございます。バックグラウンドスレッドでの操作については読んでいましたが、私の場合は実装方法をまだ分かりません。 – JuliusCezarus

0

を参照してください、あなたは、バックグラウンドでのネットワーク操作を行う必要があり、これが目指すのためOkhttpは特別な方法enqueue()を持っています。これにより、あなたのバックグラウンドスレッドが作成され、作業が簡単になります。あなたのケースでは

、これらにrun()メソッド内の行を変更:

String run(String url) throws IOException { 

    String result = ""; 

    Request request = new Request.Builder() 
     .url(url) 
     .build(); 

    Response response = client.newCall(request).enqueue(new Callback() { 

     @Override 
     public void onFailure(Call call, IOException e) { 
      // failure case 
     } 

     @Override 
     public void onResponse(Call call, Response response) throws IOException { 
      // success case 
      result = response.body().string(); 
     } 
    }); 
} 
関連する問題