0

这是我的第一个线程,所以请多多包涵。:)

我想创建一个在网站上搜索特定字符串的 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;
    }
}
  • 第一行设置您正在扫描的网站的 URL
  • 第二行打开一个互联网,让您可以直接访问 html 源代码
  • 第三行使一个缓冲读取器能够读取 InputStreamReader 给它的源
  • 第五行是当前 HTML 源代码所在的字符串,缓冲阅读器正在检查它是否包含正确的字符串。(string1.contains(string2) 查看 string2 是否在 string1 中。例如:String myName = "john";如果你要测试myName.contains("oh");它是否会返回 true)
  • 第六行是您将从 HTML 源代码中放入要查找的字符串的字符串(例如,如果您正在查找电影的名称,这将是您要为其分配名称的字符串)
  • 每次循环重新开始时,while 循环都会读取 html 源代码的下一行,并将刚刚读取的行设置为字符串变量lineThatIsBeingRead。只要有新的行要阅读,它就会继续这样做。当缓冲的阅读器到达 HTML 源代码的末尾时,while 循环的条件返回 false,它会中断循环。
  • if 语句检查lineThatIsBeingRead中是否包含字符串StringYouAreLookingFor。如果是这样,它将 theString(您要查找的字符串)设置为lineThatIsBeingRead(缓冲阅读器中的字符串),然后中断 while 循环。否则,它会重置 while 循环并重新开始。

我在那里有变量theString因为我在寻找几个字符串,但如果你只需要找到一个字符串,你可以删除第 6 行和第 11 行,只需将lineThatIsBeingRead作为你分配给你要查找的字符串的字符串。

要记住的另一件事是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 回答