【问题标题】:Reading HTML source from android app从 Android 应用程序读取 HTML 源代码
【发布时间】:2012-04-26 17:01:32
【问题描述】:

我正在尝试从用户输入的网站中获取字符串中的 HTML 源代码,我目前的代码如下所示:

public String getURLContent(String url)
{
    try 
    {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        ResponseHandler<String> resHandler = new BasicResponseHandler();
        String page = httpClient.execute(httpGet, resHandler);
        return page;
    }
    catch (ClientProtocolException e)
    {
        e.printStackTrace();
        return "";
    }
    catch (IOException e)
    {
        e.printStackTrace();
        return "";
    }
}

每次我尝试运行它时,我都会遇到第二次捕获 (IOException),根据文档,这意味着服务器无法给出有效响应...我正在使用“http:\www.google”之类的网站进行测试.com\",所以他们肯定会响应

【问题讨论】:

  • 你是否添加了android.permission.INTERNET等所需的权限?
  • 我只有这一项权限: 还有其他的吗?
  • 如果这实际上是您的网址,那么它是不正确的。在“www”之前你需要两个斜杠
  • 代码没有错!只要确保你的网址是正确的..“http://(domain)”

标签: android html http httpclient http-get


【解决方案1】:

您的代码没问题。确保粘贴完整的网站路径:http://www. [page] . [domain] 例如:http://www.google.com 并将此权限添加到AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

就在之前(如果是新项目):

<application android:label="@string/app_name">

完整示例:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example"
          android:versionCode="1"
          android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:label="@string/app_name">
        <activity android:name="MyActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest> 

【讨论】:

  • 谢谢,我的清单看起来就像这样,我确定我使用了正确的地址(我已经尝试了很多),仍然无法正常工作,当我调用 httpClient 时仍然被捕获为 IOException .execute()... 既然你们已经告诉我代码看起来正确,我要抓狂了!
  • 尝试使用调试器并逐步检查变量的值
  • 并尝试将网站地址放入new HttpGet(... 至少您可以确定地址网站不是问题
  • 我想通了,我想...我在那个 catch 块中设置了一个断点,而且我总是在命中它。我认为这意味着错误实际上被捕获了,但是当我检查返回值时,HTML 源代码在返回的字符串中,所以我假设这是调试器中的错误,因为我不应该打那个断点,或者如果我确实命中了该断点,则从函数返回的字符串应该是空的,但事实并非如此。无论如何感谢您的帮助!
【解决方案2】:

除非您想对整个字符串进行一些自定义解析,否则我建议您使用 HTML 解析器库。我使用 HTML 清理器,显示为 here

这让所有的马都为你工作。

【讨论】:

  • 我编辑了答案,因为它缺少链接。对不起这是我的错。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
相关资源
最近更新 更多