1

我的应用程序在尝试获取远程 txt 文件时崩溃。即使只是尝试解析一个 url 它也会崩溃。已设置互联网权限,并且设备/虚拟机已连接到互联网。

日志猫: 在此处输入图像描述

代码片段:

try {
    // the following line is enough to crash the app
    URL url = new URL("http://www.i.am/not/going/to/show/you/this.txt");


    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    String line = null;
    while ((line = in.readLine()) != null) {
        //get lines
    }
    in.close();


    } catch (MalformedURLException e) {

        e.printStackTrace();
    } catch (IOException e) {

        e.printStackTrace();
    }

我不明白我做错了什么。提前感谢您的帮助。

//编辑:添加日志猫片段

4

1 回答 1

1

由于主 UI 线程上的大量网络活动导致应用程序崩溃,这本身不是一个很好的做法,因为应用程序可能会停止响应并可能被操作系统杀死。您应该始终尝试在某个单独的线程中进行后台处理,而不是在主 UI 线程中。

将您的代码放入 AsyncTaskdoInBackground()中以获取文件。

private class DownloadFile extends AsyncTask<String, Integer, Void> {
     protected void doInBackground() {
         try {

       URL url = new URL("http://www.i.am/not/going/to/show/you/this.txt");       

    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    String line = null;
    while ((line = in.readLine()) != null) {
        //get lines
    }
    in.close();


    } catch (MalformedURLException e) {

        e.printStackTrace();
    } catch (IOException e) {

        e.printStackTrace();
    }
 }

 protected void onProgressUpdate() {
    //called when the background task makes any progress
 }

  protected void onPreExecute() {
     //called before doInBackground() is started
 }
 protected void onPostExecute() {
     //called after doInBackground() has finished 
 }
  }

您可以调用此任务以从new DownloadFile().execute("");您想要获取文件的任何位置获取文件。

于 2012-09-21T16:06:40.727 回答