我的MainActivity调用HandleWebPage.init()来下载和解析网页链接。在init()调用之后,我将得到一组字符串(3个字符串)。每个字符串都显示在单独的片段中(默认的第一个片段带有第一个字符串)。可以通过导航抽屉选择其他片段。
问题是我正在尝试添加进度对话框,该对话框应显示加载图标(旋转圆圈),直到Handle Webpage.init()完成。
init()函数在内部调用2个异步任务;一个是下载网页,另一个是使用jsoup处理网页以获得上面的字符串。
当init()函数被处理并返回到MainActivity时,如何添加进度对话框?
我尝试在AsyncTask中添加init()并在onPreExecution等中放置进度对话框,但是没有用。 还尝试创建progressdialog.show()然后创建一个线程并启动并调用init() 不工作。 我想知道什么是正确的解决方案 以下是代码段。
MainActivity.java /// ------------snip
if(savedInstanceState == null) {
updateYearMonthDay(); //gets year, month, day
//hwp is instance of HandleWebPage class
// hwp.init() internally downloads a webpage and process
// This takes some time and I require to show some progress around this
hwp.init(year, month, day);
// after complete i get 3 strings which is processed further in below function
updateMetaData();
// this show first fragment with fist string in text view.
SelectItem(0);
}
HandleWebPage.java
--------------------
public void init()
{
doc = downloadPage();
if (doc != null) {
extractlinks(doc);
}
// some other function which uses AsyncTask as
String = new getmoreInfo().execute(dataString1).get();
}
public Document downloadPage()
{
try {
doc = new getWebPage().execute(urlString).get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return doc;
}
public class getWebPage extends AsyncTask<String, Document , Document> {
@Override
protected void onPreExecute() {
}
@Override
protected Document doInBackground(String... params) {
try {
doc = Jsoup.connect(params[0]).timeout(0).get();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(doc == null) {
return null;
} else
return doc;
}
@Override
protected void onPostExecute(Document doc1) {
super.onPostExecute(doc1);
}
};
public void extractLinks(Document doc)
{
// code to process doc using jsoup and update respective String in this class.
}
答案 0 :(得分:0)
您可以将顺序执行的两个AsyncTask
合并到一个AsyncTask中。要在AsyncTask
期间显示进度条,请在创建活动时以GONE
的可见性初始化进度条。然后在[{1}} VISIBLE
方法中将onPreExecute()
设置为AsyncTask
,并在GONE
方法中将其设置回onPostExecute()
。