Java 使用AsyncTask读取网站的html代码

Java 使用AsyncTask读取网站的html代码,java,android,android-asynctask,Java,Android,Android Asynctask,我已经清理并重建了我的代码,但问题仍然没有解决 代码如下: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

我已经清理并重建了我的代码,但问题仍然没有解决

代码如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String result = null;
        String stringUrl = "https://www.ecowebhosting.co.uk/";
        DownloadTask downloadTask = new DownloadTask();

        downloadTask.execute(stringUrl);
    }

    public class DownloadTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {
            String result = "";
            URL url;
            HttpURLConnection httpURLConnection = null;
            try {
                url = new URL(urls[0]);
                //It is like opening a browser
                httpURLConnection = (HttpURLConnection) url.openConnection();
                InputStream in = httpURLConnection.getInputStream();
                InputStreamReader reader = new InputStreamReader(in);
                int data = reader.read();
                while (data != -1) {
                    char currentChar = (char) data;
                    result = result + currentChar;
                    data = reader.read();
                }
                return result;
            } catch (Exception e) {
                e.printStackTrace();
                return "Failed";
            }
        }
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);

            Log.i("Results",s);
        }
    }
}
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
字符串结果=null;
字符串stringUrl=”https://www.ecowebhosting.co.uk/";
DownloadTask DownloadTask=新的DownloadTask();
downloadTask.execute(stringUrl);
}
公共类DownloadTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…URL){
字符串结果=”;
网址;
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){
char currentChar=(char)数据;
结果=结果+当前字符;
data=reader.read();
}
返回结果;
}捕获(例外e){
e、 printStackTrace();
返回“失败”;
}
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
Log.i(“结果”,s);
}
}
}
代码运行正常,但日志中没有打印任何内容。以下是日志:


异步任务
是一个异步过程。因此,当您调用
Log.i(“Result:,Result”),异步任务未完成,
结果
仍然为空

您应该从
onPostExecute()
方法打印结果。 你可以看着

下面是一些关于如何正确实现
AsyncTask
的示例:


最好的

您只需在您的doInBackGround中更改代码即可

public class DownloadTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
        String result;
        String inputLine;
        try {
            URL myUrl = new URL(urls[0]);
            HttpURLConnection connection =(HttpURLConnection)
                    myUrl.openConnection();
            connection.setReadTimeout(150000); 
            connection.setConnectTimeout(15000); 
            connection.setRequestMethod("GET");
            connection.connect();
            InputStreamReader streamReader = new InputStreamReader(connection.getInputStream());
            //Create a new buffered reader and String Builder
            BufferedReader reader = new BufferedReader(streamReader);
            StringBuilder stringBuilder = new StringBuilder();
            //Check if the line we are reading is not null
            while((inputLine = reader.readLine()) != null){
                stringBuilder.append(inputLine);
            }
            //Close our InputStream and Buffered reader
            reader.close();
            streamReader.close();
            //Set our result equal to our stringBuilder
            result = stringBuilder.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "error";
        }
        return result;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

        Log.i("Results",s);
    }
}
公共类下载任务扩展了异步任务{
@凌驾
受保护的字符串doInBackground(字符串…URL){
字符串结果;
字符串输入线;
试一试{
URL myUrl=新URL(URL[0]);
HttpURLConnection连接=(HttpURLConnection)
openConnection();
连接。setReadTimeout(150000);
连接。设置连接超时(15000);
connection.setRequestMethod(“GET”);
connection.connect();
InputStreamReader streamReader=新的InputStreamReader(connection.getInputStream());
//创建新的缓冲读取器和字符串生成器
BufferedReader reader=新的BufferedReader(streamReader);
StringBuilder StringBuilder=新的StringBuilder();
//检查我们正在读取的行是否不为空
而((inputLine=reader.readLine())!=null){
stringBuilder.append(inputLine);
}
//关闭输入流和缓冲读取器
reader.close();
streamReader.close();
//将结果设置为与stringBuilder相等
结果=stringBuilder.toString();
}捕获(例外e){
e、 printStackTrace();
返回“错误”;
}
返回结果;
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
Log.i(“结果”,s);
}
}

请检查下一步。这是我推荐的
onPostExecute
部分。我使用onPostExecute()更新了代码,但仍然不起作用。我也添加了onPostExecute,但仍然不起作用。你是如何做到的?@Maxoulli我已经更新了代码。请查看一下,如果你在
doInBackground()
中打印结果会发生什么?它也是空的?你应该看看@Mukul answer;)我的代码在我朋友的电脑上可用,但在我的电脑上不可用。这就是我发布此问题的原因。是的,我尝试了此代码,但在日志中也没有给出任何信息