我正在编写一个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)
答案 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" />