2016-12-05 45 views
0

私はちょっと素朴で、私はあなたがJavaで行うのと同じ方法でWebページを読むことができると思っていましたが、明らかにスレッドまたはAsyncTaskを使用する必要があります。私は以前の経験がなく、手間がかかっています。スレッドの助けを借りてURLページを読む - Android

私は半分理解しているhttp://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html(3点)を読んだことがありますが、私が問題に取り入れようとすると、すべてが崩壊します。ここで

は私の問題だ:

  1. 私はURLから読み取る必要があり、それはRSSフィードです。それはすべて一緒に
  2. ListView(arrayadapter)にそれを挿入し
  3. 解析

これは私が再作成しようとしたことを、私のAsyncTaskクラスです。バッファリングされたリーダー、またはページ全体を返すだけですが、常にnullです。

private class DownloadWebPageTask extends AsyncTask<String, Void, BufferedReader> { 

    @Override 
    protected BufferedReader doInBackground(String... urls) { 
     BufferedReader bs; 
     URL url = null; 
     try { 
      url = new URL(urls[0]); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 
     try { 
      bs = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8")); 
      return bs; 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    protected void onPostExecute(BufferedReader result) { 
     br = result; 
    } 
} 

public RSS() throws IOException, ExecutionException, InterruptedException { 
    DownloadWebPageTask dl = new DownloadWebPageTask(); 
    dl.execute(new String[]  {"http://www.promet.si/dc/PROMET.ROADEVENTS.PP.RSS.SL"}); 
} 

これは愚かな質問である場合、私は申し訳ありませんが、私は完全にこれを説明する記事を理解していないと私は、この問題を解決する必要があります。私はちょうど形や形を問わずページのコンテンツを必要とします。 (StringBufferedReaderすることができます)

答えて

1
@Override 
    protected String doInBackground(String... urls) throws IOException { 
     URLConnection connection = new URL(urls[0]).openConnection(); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()),"UTF-8"); 
     StringBuilder stringBuilder = new StringBuilder(); 
     String buffer; 
     while ((buffer = bufferedReader.readLine()) != null) { 
      stringBuilder.append(buffer); 
     } 
     return stringBuilder.toString(); 
    } 

は、バックグラウンドスレッドで行ずつ読んで、そしてそれは、文字列を返すようにするために、バッファリーダーを使用してください。

+0

これは動作しますが、この結果をAsyncTask以外で使用するには、PostExecuteから結果を取得して、呼び出した後に印刷しようとします。 dl.execute(new String [] {"http:// www.promet.si/dc/PROMET.ROADEVENTS.PP.RSS.SL "}); とその空です。私はタイミングが間違っていると思う。 –

関連する問題