【问题标题】:Read html code of website using AsyncTask使用 AsyncTask 读取网站的 html 代码
【发布时间】:2019-03-14 09:36:42
【问题描述】:

我也清理并重建了我的代码,但问题仍未解决。

下面是代码:

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);
        }
    }
}

代码运行良好,但日志中没有打印任何内容。以下是日志:

【问题讨论】:

  • 检查AsyncTask example code。我推荐的是onPostExecute 部分。
  • 我已经使用 onPostExecute() 更新了代码,但还是不行

标签: java android android-asynctask


【解决方案1】:

AsyncTask 是一个异步进程。所以当你调用Log.i("Result:", result);的时候,AsyncTask没有完成,result还是空的。

您应该从onPostExecute() 方法打印您的结果。 你可以关注this page

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

最好的

【讨论】:

  • 我也添加了 onPostExecute 但还是不行。
  • 你是怎么做到的?
  • @Maxoulli 我已经更新了代码。请查看它
  • 如果在doInBackground() 中打印结果会发生什么?也是空的?
  • 你应该看看@Mukul 的回答;)
【解决方案2】:

您只需更改 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);
    }
}

【讨论】:

  • 我的代码在我朋友的电脑上工作,但在我的电脑上却不工作。这就是我发布这个问题的原因
  • 是的,我试过这段代码在日志中也没有给出任何内容
猜你喜欢
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
相关资源
最近更新 更多