【问题标题】:Android: Having trouble getting html from webpageAndroid:无法从网页获取 html
【发布时间】:2011-01-17 23:34:02
【问题描述】:

我正在编写一个 android 应用程序,它应该从 php 页面获取 html 并使用页面中的解析数据。我在这里搜索了这个问题,最后使用了另一个海报发布的示例中的一些代码。到目前为止,这是我的代码:

HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet(url);
    try {
        Log.d("first","first");
        HttpResponse response = client.execute(request);
        String html = "";
        Log.d("second","second");
        InputStream in = response.getEntity().getContent();
        Log.d("third","third");
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        Log.d("fourth","fourth");
        StringBuilder str = new StringBuilder();
        String line = null;
        Log.d("fifth","fifth");
        while((line = reader.readLine()) != null) {
            Log.d("request line",line);
        }
        in.close();
    } catch (ClientProtocolException e) {

    } catch (IOException e) {
        // TODO Auto-generated catch block
        Log.d("error", "error");
    }
    Log.d("end","end");
}

就像我之前说的,url 是一个 php 页面。每当我运行此代码时,它会打印出第一条消息,然后打印出错误错误消息,最后打印出结束消息。我试过修改标题,但我没有运气。任何帮助将不胜感激,因为我不知道我做错了什么。

谢谢!

当我执行 e.getMessage() 并将其打印出来时,在记录器中它只显示 stanford.edu。希望有帮助。这是堆栈跟踪:

01-17 16:58:27.687: WARN/System.err(452): java.net.UnknownHostException: stanford.edu 01-17 16:58:27.947: WARN/System.err(452): 在 java.net.InetAddress.lookupHostByName(InetAddress.java:506) 01-17 16:58:27.947: WARN/System.err(452): 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:294) 01-17 16:58:27.977: WARN/System.err(452): 在 java.net.InetAddress.getAllByName(InetAddress.java:256) 01-17 16:58:27.977: WARN/System.err(452): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136) 01-17 16:58:28.027: WARN/System.err(452): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 01-17 16:58:28.027: WARN/System.err(452): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 01-17 16:58:28.047: WARN/System.err(452): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348) 01-17 16:58:28.057: WARN/System.err(452): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 01-17 16:58:28.057: WARN/System.err(452): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 01-17 16:58:28.117: WARN/System.err(452): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 01-17 16:58:28.117: WARN/System.err(452): at edu.stanford.cs247.util.ColorHandler.getInfo(ColorHandler.java:44) 01-17 16:58:28.217: WARN/System.err(452): at edu.stanford.cs247.util.ColorHandler.handleMessage(ColorHandler.java:70) 01-17 16:58:28.217: WARN/System.err(452): 在 android.os.Handler.dispatchMessage(Handler.java:99) 01-17 16:58:28.247: WARN/System.err(452): 在 android.os.Looper.loop(Looper.java:123) 01-17 16:58:28.257: WARN/System.err(452): 在 android.app.ActivityThread.main(ActivityThread.java:3647) 01-17 16:58:28.257: WARN/System.err(452): 在 java.lang.reflect.Method.invokeNative(Native Method) 01-17 16:58:28.297: WARN/System.err(452): 在 java.lang.reflect.Method.invoke(Method.java:507) 01-17 16:58:28.297: WARN/System.err(452): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 01-17 16:58:28.327: WARN/System.err(452): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 01-17 16:58:28.337: WARN/System.err(452): at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: php android html request


    【解决方案1】:

    首先,Log.d() 方法调用可能类似于 Log.d("MyAppName", "Message") 而不是 Log.d("Message", "Message") 这样您就可以在 LogCat 中为您的应用程序创建一个过滤器并仅查看您的消息。 (在 Eclipse 上检查)

    对于您的问题,请尝试在 catch 块中添加一些有用的消息,例如:

    try{
    ...
    } catch (IOException e){
    Log.d("MyAppName", e.getMessage());
    }
    

    这将向您展示引发异常的问题。 考虑看看this 示例代码,getUrlContent() 完全按照您的意愿行事。

    祝你好运

    【讨论】:

    • @GojaN Log.d("MyClass", "MyMessage", e);可能会更可取。这样您就可以获得完整的堆栈跟踪。
    • 这是一个神。也许我更喜欢 Log.d("MyClass", e.getMessage(), e)。这样你就有了两者的结合:)
    • 当我打印出消息时,上面只写了我大学的名字.edu
    • @GojaN 实际上,当您要求它打印包含消息文本的堆栈跟踪时。
    • @Kyle 你打印出完整的堆栈跟踪了吗?请编辑您的问题以包含该内容。
    【解决方案2】:

    你的堆栈跟踪的第一行说:

    java.net.UnknownHostException: 斯坦福大学

    您应该学习阅读堆栈跟踪。快速搜索“UnknownHostException”会告诉您它是:

    抛出表明IP地址 无法确定主机。

    这意味着它不能将 stanford.edu 变成 IP。您可能需要www.stanford.edu 或类似的东西。尝试在命令行ping www.stanford.edu 上ping 地址,并确保它解析为IP 地址。

    【讨论】:

    • 我之前也这样做过,但无济于事:(
    • 我知道如何读取堆栈跟踪,但在查找 UnknownHostException 时找不到任何可以帮助我的东西:(
    • 它正在解析到一个IP地址
    • 想通了。我没有在清单文件中添加互联网权限:(
    【解决方案3】:

    我忘记在清单文件中添加互联网权限。

    【讨论】:

      【解决方案4】:

      添加到清单 <uses-permission android:name="android.permission.INTERNET" />

      【讨论】:

        猜你喜欢
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-30
        • 2019-01-05
        • 2023-04-03
        • 2016-09-17
        • 2016-09-15
        • 1970-01-01
        相关资源
        最近更新 更多