0

これは私の最初のスレッドですので、ご容赦ください。:)

Web サイトで特定の文字列を検索する Android サービスを作成したいと考えています。これを行うために、そのサイトをダウンロードして html コード内を検索しようとしましたが、ダウンロードしようとするとアプリケーションが常にクラッシュします。

これを行う方法を知っている人はいますか?

前もって感謝します

4

1 に答える 1

0

映画情報のために imdb.com をスキャンする Android アプリの作成を開始したとき、私は同様の問題を抱えていました。多くのインターネットを検索して物事をテストした後、私はこれを思いつきました:

import java.net.*;
import java.io.*;

URL url = new URL("websiteToLookAt");
InputStreamReader isr = new InputStreamReader(url.openStream());
BufferedReader bufferedReader = new BufferedReader(isr);

String lineThatIsBeingRead = null;
String theString;

while((lineThatIsBeingRead = bufferedReader.readLine()) != null){

    if(lineThatIsBeingRead.contains("StringYouAreLookingFor")){
        theString = lineThatIsBeingRead;
        break;
    }
}
  • 最初の行は、スキャンしている Web サイトの URL を設定します
  • 2行目は、HTMLソースに直接アクセスできるようにインターネットを開きます
  • 3 行目は、InputStreamReader が提供するソースを読み取ることができる Buffered リーダーを作成します。
  • 5 行目は、バッファリングされたリーダーが正しい文字列が含まれているかどうかをチェックしている間、HTML ソースの現在の行が保持されている文字列です。(string1.contains(string2) は、string2 が string1 にあるかどうかを調べます。例: true を返すString myName = "john";かどうかをテストする場合myName.contains("oh");)
  • 6 行目は、HTML ソースから探している文字列を入れる文字列です (映画の名前を探している場合、これは名前を割り当てる文字列になります)。
  • while ループは、ループが最初からやり直すたびに html ソース コードの次の行を読み取り、読み取ったばかりの行を String 変数lineThatIsBeingReadに設定します。読み取る新しい行がある限り、これを続けます。バッファリングされたリーダーが HTML ソースの最後に到達すると、while ループの条件が false を返し、ループが中断されます。
  • ifステートメントは、lineThatIsBeingReadに文字列StringYouAreLookingForが含まれているかどうかをチェックします。存在する場合は、theString (探している文字列) をlineThatIsBeingRead (バッファリングされたリーダーにある文字列) に設定し、while ループを中断します。そうしないと、while ループがリセットされ、最初からやり直されます。

いくつかの文字列を探していたので、そこに変数theStringがありますが、1 つの文字列だけを見つける必要がある場合は、6 行目と 11 行目を削除し、探している文字列を割り当てる文字列としてlineThatIsBeingReadを使用できます。

心に留めておくべきもう1つのことは、JavaはUIスレッドを介してインターネットに接続することを許可していないことです(Javaがあなたにそれを望んでいる方法は意図的であるため、アプリを公開するときはこれを取り出して実行することを忘れないでください意図的に)。しかし、追加すると

if(BuildVERSION.SDK_INT >= 9){
    StrickMode.ThreadPolicy Policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

    StrictMode.setThreadPolicy(Policy);
}

onCreate() メソッドに追加すると、そのルールがバイパスされます。

これがお役に立てば幸いです。プロジェクトの成功を祈っています。

于 2013-11-14T05:21:02.767 に答える