Android Studio - AsyncTask加载网站内容时使用进度条的问题

时间:2017-01-20 00:40:02

标签: android android-asynctask android-progressbar

我在Android Studio 2.2.3中制作猜测应用程序,我需要从网站加载一些数据。我使用的是AsyncTask类,它接受网站的URL作为String,并将数据作为String返回。

问题是加载非常慢,因此应用程序在手机上显示一个空白的白色屏幕大约15-20秒,直到(我推测)整个内容被下载。

我想要做的是在应用加载数据之前显示一个不确定的进度条(我认为这是旋转圆圈的调用)。

为此,我尝试传入AsyncTask,然后在onPreExecute()中显示进度条视图,并在onPostExecute()中再次进行隐藏。

但这并没有成功,它仍然显示相同的白屏。

这是我的AsyncTask:

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

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pb.setVisibility(ProgressBar.VISIBLE);
    }

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

        pb.setVisibility(ProgressBar.INVISIBLE);
    }

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

        String result = "";
        URL url;
        HttpURLConnection urlConnection;

        try {

            url = new URL(urls[0]);

            urlConnection = (HttpURLConnection) url.openConnection();

            InputStream in = urlConnection.getInputStream();

            InputStreamReader isr = new InputStreamReader(in);

            int data = isr.read();

            while (data != -1) {

                char current = (char) data;

                result += current;

                data = isr.read();

            }

            return result;

        } catch (Exception e) {

            e.printStackTrace();

        }

        //if try fails
        return null;
    }

}

这是我在onCreate()

中调用它的时候
    DownloadTask downloadTask = new DownloadTask();
    String result;

    try {

        String websiteUrl = "http://www.india-forums.com/celebrity/bollywood/";

        result = downloadTask.execute(websiteUrl).get();

我在某处读到get()阻止了主UI线程,但是如果我删除它,我会得到一个不兼容的类型错误,所以无法解决它......

我错过了什么/做错了什么?

任何帮助将不胜感激!

0 个答案:

没有答案