Android:无法从网页获取HTML

时间:2011-01-17 23:34:02

标签: php android html request

我正在编写一个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):at java.net.InetAddress.lookupHostByName(InetAddress.java:506) 01-17 16:58:27.947:WARN / System.err(452):at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294) 01-17 16:58:27.977:WARN / System.err(452):at 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):at 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):at java.lang.reflect.Method.invokeNative(Native Method) 01-17 16:58:28.297:WARN / System.err(452):at java.lang.reflect.Method.invoke(Method.java:507) 01-17 16:58:28.297:WARN / System.err(452):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839) 01-17 16:58:28.327:WARN / System.err(452):at 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)

4 个答案:

答案 0 :(得分: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()完全按照您的惯例进行操作。

祝你好运

答案 1 :(得分:0)

你的stacktrace的第一行说:

  

的java.net.UnknownHostException:   stanford.edu

你应该学会阅读stacktraces。快速搜索“UnknownHostException”会告诉您:

  

抛出以指示IP地址   无法确定主持人。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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