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;)我的代码在我朋友的电脑上可用,但在我的电脑上不可用。这就是我发布此问题的原因。是的,我尝试了此代码,但在日志中也没有给出任何信息