2011-06-14 8 views
0

ユーザーからURLを受け取り、送信ボタンをクリックすると、URLを取得して電話をかけ、 HTMLソースコードをページから取得します。アンドロイドアプリケーションでURLを使用してHTMLソースコードを取得する

W/System.errの(14858):android.os.NetworkOnMainThreadException W/System.errの(14858):android.os.StrictMode $ AndroidBlockGuardPolicy.onNetworkで(ただし、私は次の例外を得ていますStormMode.java:1077)

私が開発しようとしているプラ​​ットフォームは、アンドロイド3.0ではメインメソッドでネットワークリソースを使用できないようです。私は、バックグラウンドでそれを実行するか、非同期メソッドを使用するなどのメソッドがあることを理解していますが、誰もこれについて私を導くことができますか?私はそれについてどうやって行くのかについてはあまりよく分かりません。私はプログラミングが初めてです。 ありがとうございます。以下は

onclickの方法で、私の現在のコードです:

String htmlCode = ""; 

    try { 
    URL url = new URL("http://www.google.com"); 
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 

    String inputLine; 

    while ((inputLine = in.readLine()) != null) { 
     htmlCode += inputLine; 
     Log.d(LOG_TAG, "html: " + inputLine); 
    } 

    in.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.d(LOG_TAG, "Error: " + e.getMessage()); 
     Log.d(LOG_TAG, "HTML CODE: " + htmlCode); 
    } 

答えて

1

あなたはRunnableをまたはスレッドを使用することができますが、これを行うには、おそらく最も慣用のAndroid方法はAsyncTaskを使用することです。

new AsyncTask<String, Void, String>(){ 
    @Override 
    protected String doInBackground(String... urlStr){ 
    // do stuff on non-UI thread 
    StringBuffer htmlCode = new StringBuffer(); 
    try{ 
     URL url = new URL(urlStr[0]); 
     BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 

     String inputLine; 

     while ((inputLine = in.readLine()) != null) { 
     htmlCode += inputLine; 
     Log.d(LOG_TAG, "html: " + inputLine); 
     } 

     in.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.d(LOG_TAG, "Error: " + e.getMessage()); 
     Log.d(LOG_TAG, "HTML CODE: " + htmlCode); 
    } 
    return htmlCode.toString(); 
    }   

    @Override 
    protected void onPostExecute(String htmlCode){ 
    // do stuff on UI thread with the html 
    TextView out = (TextView) findViewById(R.id.out); 
    out.setText(htmlCode); 
    } 
}.execute("http://www.google.com"); 
関連する問題