我在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线程,但是如果我删除它,我会得到一个不兼容的类型错误,所以无法解决它......
我错过了什么/做错了什么?
任何帮助将不胜感激!