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