我正在尝试阅读网址的内容。 BufferedReader的初始化导致崩溃。
我试过查找人们的解决方案,但不管我做什么,我都会收到这个错误。
这是我的代码:
try {
String sUrl = "http://www.google.com";
System.out.println("About to create URL.");
URL url = new URL(sUrl);
System.out.println("Created URL");
System.out.println("About to create URLConnection");
URLConnection urlc = url.openConnection();
System.out.println("Created URLConnection");
System.out.println("About to create the BufferedReader");
BufferedReader bR = new BufferedReader(new
InputStreamReader(urlc.getInputStream()));
System.out.println("Created the BufferedReader");
System.out.println("About to create a StringBuilder");
StringBuilder sBuilder = new StringBuilder();
System.out.println("Created StringBuilder");
int byteRead;
System.out.println("About to enter while loop and build string");
while ((byteRead = bR.read()) != -1)
{
sBuilder.append((char) byteRead);
}
System.out.println("Built string");
bR.close();
System.out.println("Buffered reader is closed");
String text = sBuilder.toString();
System.out.println(text);
}
catch (IOException e)
{
//
}
以下是我得到的(部分)日志:
07-24 13:56:17.546: I/System.out(1554): About to create URL.
07-24 13:56:17.557: I/System.out(1554): Created URL
07-24 13:56:17.557: I/System.out(1554): About to create URLConnection
07-24 13:56:17.557: I/System.out(1554): Created URLConnection
07-24 13:56:17.557: I/System.out(1554): About to create the BufferedReader
07-24 13:56:17.576: D/AndroidRuntime(1554): Shutting down VM
07-24 13:56:17.576: W/dalvikvm(1554): threadid=1: thread exiting with uncaught exception
(group=0x40a13300)
07-24 13:56:17.606: E/AndroidRuntime(1554): FATAL EXCEPTION: main
07-24 13:56:17.606: E/AndroidRuntime(1554): java.lang.RuntimeException: Unable to start
activity ComponentInfo{com. ...
提前致谢。
答案 0 :(得分:5)
从Android 3.0开始,在主UI线程中打开网址连接是不合法的。你必须在AsyncTask / Background线程中执行此操作。
答案 1 :(得分:0)
1。始终建议保持 UI在UI线程上工作,非UI工作在非UI线程上从而成为法律HoneyComb版Android 。
此外,请尝试以下代码....
public final String sUrl = "http://www.google.com";
new Thread(new Runnable(){
public void run(){
URL url = new URL(sUrl);
InputStream i = url.openStream();
InputStreamReader isr = new InputStreamReader(i);
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String s = null;
while ((br.readLine())!=null){
sb.append(br.readLine());
}
s = sb.toString();
System.out.println(s);
}
}).start();
2。此代码可能只有InputStream and Scanner
,更小,但正如您所提到的 BufferedReader
,我使用它强> ...
3。您还可以使用专为Android设计的AsyncTask
,称为无痛线程,可轻松同步UI和非UI线程。 < / p>