创建BufferedReader以读取导致错误的URL:无法启动活动

时间:2012-07-24 18:09:47

标签: java android bufferedreader urlconnection

我正在尝试阅读网址的内容。 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. ... 

提前致谢。

2 个答案:

答案 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>