在Android上下载html源会崩溃应用程序

时间:2012-08-20 16:52:30

标签: android html

我正在尝试将某些网站的代码下载到我的应用中:

 public void wypned(final View pwn) throws IllegalStateException, IOException{
    HttpClient httpClient = new DefaultHttpClient();
    HttpContext localContext = new BasicHttpContext();
    HttpGet httpGet = new HttpGet("http://example.com");
    HttpResponse response = httpClient.execute(httpGet, localContext);
    String result = "";

    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent() ) );

    String line = null;
    while ((line = reader.readLine()) != null){
    result += line + "\n";
    }
}

我所得到的只是致命的错误。 LogCat说:

Caused by: android.os.NetworkOnMainThreadException
 on Android 3.x and up, you can't do network I/O on the main thread

有人能告诉我如何解决它吗?我试图用线程做一些事情,但它没有成功。

2 个答案:

答案 0 :(得分:2)

实现asyncTask:

public class MyAsyncTask extends AsyncTask<Void, Void, Result>{

                        private Activity activity;
                        private ProgressDialog progressDialog;

            public MyAsyncTask(Activity activity) {
                            super();
                this.activity = activity;
            }

            @Override
            protected void onPreExecute() {
            super.onPreExecute();
                progressDialog = ProgressDialog.show(activity, "Loading", "Loading", true);
            }

            @Override
            protected Result doInBackground(Void... v) {
            //do your stuff here
            return null;

            }

            @Override
            protected void onPostExecute(Result result) {
                progressDialog.dismiss();
                Toast.makeText(activity.getApplicationContext(), "Finished.", 
                        Toast.LENGTH_LONG).show();
            }


}

从活动中调用它:

MyAsyncTask task = new AsyncTask(myActivity.this);
task.execute();

答案 1 :(得分:0)

所有网络操作(因为它们都在阻塞)应该在一个单独的线程上完成。 Android开发指南建议这样做。

android.os.NetworkOnMainThreadException
  

应用程序尝试执行时抛出的异常   在其主线程上进行网络操作。

     

这仅适用于针对Honeycomb SDK或。的应用程序   更高。允许使用早期SDK版本的应用程序   他们的主要事件循环线程上的网络,但它是很重要的   气馁。

为您的网络操作创建一个单独的线程,它基本上告诉您。

  

可能长时间运行的操作,例如网络或数据库   操作,或计算上昂贵的计算,如调整大小   位图应该在子线程中完成

Source1 Source2