Java 应用程序下载网页不工作

Java 应用程序下载网页不工作,java,android,html,download,Java,Android,Html,Download,我正在学习android开发,在下面的一个教程中,我演示了如何使用AsyncTask类下载网页并将其打印到日志中,但问题是,应用程序挂起(ui元素既不出现在emulator中,也不出现在我的手机中)以及当ui元素出现时(长时间后,比如5分钟)日志中的html源代码未显示 这是代码 package com.example.slimshady.downloadhtml; 导入android.os.AsyncTask; 导入android.support.v7.app.AppActivity; 导入a

我正在学习android开发,在下面的一个教程中,我演示了如何使用AsyncTask类下载网页并将其打印到日志中,但问题是,应用程序挂起(ui元素既不出现在emulator中,也不出现在我的手机中)以及当ui元素出现时(长时间后,比如5分钟)日志中的html源代码未显示

这是代码

package com.example.slimshady.downloadhtml;
导入android.os.AsyncTask;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
导入javax.net.ssl.HttpsURLConnection;
公共类MainActivity扩展了AppCompatActivity{
公共类DownloadTask扩展了AsyncTask{
@凌驾
受保护的字符串背景(字符串…按钮){
网址;
HttpURLConnection HttpURLConnection=null;
字符串结果=”;
//如果url格式不正确,请尝试捕获
试一试{
url=新url(按钮[0]);
httpURLConnection=(httpURLConnection)url.openConnection();
InputStream in=httpURLConnection.getInputStream();
InputStreamReader reader=新的InputStreamReader(in);
int data=reader.read();
while(数据!=-1)
{
当前字符=(字符)数据;
结果+=电流;
data=reader.read();
}
返回结果;
}捕获(例外e){
e、 printStackTrace();
返回“失败”;
}
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DownloadTask DownloadTask=新的DownloadTask();
试一试{
字符串内容=下载任务。执行(“https://www.google.com).get();
Log.i(“返回字符串”,content.toString());
}捕获(例外e)
{
e、 printStackTrace();
}
}
}

看起来一切正常,但仍然没有html源代码日志记录,是什么原因导致ui元素出现得比应该的要晚很多?我的意思是,异步任务的全部原因是它们独立于主线程运行,因此ui元素不受任务的影响,对吗?

问题是,您正在调用它,它将阻止线程,直到您得到响应为止,因此只需使用

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);    
    new DownloadTask().downloadTask.execute("https://www.google.com");
}
并在
onPostExecute

您还可以使用
StringBuffer
BufferReader
改进代码

public class DownloadTask extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... buttoks) {

            URL url;
            HttpURLConnection httpURLConnection = null;
            String result = "";
            StringBuffer buf = new StringBuffer(); 

            // try catch for if malformed url
            try {
                url = new URL(buttoks[0]);

                httpURLConnection = (HttpURLConnection)url.openConnection();

                InputStream in = httpURLConnection.getInputStream();

                BufferedReader reader =new BufferedReader(new InputStreamReader(in));

                if (is != null) {                            
                    while ((result = reader.readLine()) != null) {    
                        buf.append(result);
                    }                
                }

                return  buf.toString();

            } catch (Exception e) {
                e.printStackTrace();
                return "failed";
            }

        }

        @Override
        ... onPostExecute(String str){
                // update UI here
        }
    }
公共类下载任务扩展了异步任务{
@凌驾
受保护的字符串背景(字符串…按钮){
网址;
HttpURLConnection HttpURLConnection=null;
字符串结果=”;
StringBuffer buf=新的StringBuffer();
//如果url格式不正确,请尝试捕获
试一试{
url=新url(按钮[0]);
httpURLConnection=(httpURLConnection)url.openConnection();
InputStream in=httpURLConnection.getInputStream();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(in));
如果(is!=null){
而((result=reader.readLine())!=null){
追加(结果);
}                
}
返回buf.toString();
}捕获(例外e){
e、 printStackTrace();
返回“失败”;
}
}
@凌驾
…onPostExecute(字符串str){
//在此处更新用户界面
}
}

我很高兴能帮上忙,编码快乐!
public class DownloadTask extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... buttoks) {

            URL url;
            HttpURLConnection httpURLConnection = null;
            String result = "";
            StringBuffer buf = new StringBuffer(); 

            // try catch for if malformed url
            try {
                url = new URL(buttoks[0]);

                httpURLConnection = (HttpURLConnection)url.openConnection();

                InputStream in = httpURLConnection.getInputStream();

                BufferedReader reader =new BufferedReader(new InputStreamReader(in));

                if (is != null) {                            
                    while ((result = reader.readLine()) != null) {    
                        buf.append(result);
                    }                
                }

                return  buf.toString();

            } catch (Exception e) {
                e.printStackTrace();
                return "failed";
            }

        }

        @Override
        ... onPostExecute(String str){
                // update UI here
        }
    }