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

Android Studio-AsyncTask加载网站内容时使用进度条的问题,android,android-asynctask,android-progressbar,Android,Android Asynctask,Android Progressbar,我正在Android Studio 2.2.3中制作一个猜测应用程序,我需要从网站加载一些数据。我使用的是AsyncTask类,它接受网站的URL作为字符串,并返回数据作为字符串 问题是加载速度非常慢,因此应用程序会在手机上显示一个空白的白色屏幕,持续约15-20秒,直到(我猜)全部下载完毕 我想做的是显示一个不确定的进度条(我想这就是旋转圆的名称),直到应用程序加载数据 为此,我尝试传入AsyncTask,然后使progressbar视图在onPreExecute()中可见,在onPostEx

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

问题是加载速度非常慢,因此应用程序会在手机上显示一个空白的白色屏幕,持续约15-20秒,直到(我猜)全部下载完毕

我想做的是显示一个不确定的进度条(我想这就是旋转圆的名称),直到应用程序加载数据

为此,我尝试传入AsyncTask,然后使progressbar视图在onPreExecute()中可见,在onPostExecute()中再次不可见

但这不起作用,它仍然显示相同的白色屏幕

这是我的任务:

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

}
我在某个地方读到get()阻塞了主UI线程,但是如果我删除它,我会得到一个不兼容的类型错误,因此仍然无法解决它

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


任何帮助都将不胜感激

我错过了什么/做错了什么?您正在使用
AsyncTask.get
。。。还有离题的评论:为什么要逐字节读取流而不是使用缓冲区?对不起,我不熟悉异步任务。。。我应该使用什么来代替AsyncTask.get??谢谢好的,谢谢,一个字节一个字节地使用它和缓冲区有什么区别,它最终是相同的数据,对吗?显然是速度和内存使用。。。在每次迭代中,您都在向字符串添加字符。。它每次都会创建新字符串..它会使用类似于:BufferedReader=new BufferedReader(in)的东西吗??
    DownloadTask downloadTask = new DownloadTask();
    String result;

    try {

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

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