1
我想有一个ProgressDialog
出现时onPreExecute(在AsyncTask
开始),在做一些doInBackground()
的东西,在onPostExecute()
关闭ProgressDialog
后。Android的 - 的AsyncTask - onPreExecute()运行doInBackground()完成
无处不看我认为这应该是简单而直接的,但我必须做错事。
每当我在我的应用程序更新点击Button
和AsyncTask
运行应用程序死机,等待了一下,然后立刻ProgressDialog
出现并消失,完成doInBackground()
工作。我不明白为什么onPreExecute()
正在doInBackground()
之后运行,但这似乎正是这里发生的情况。下面是代码:
public class UpdateStats extends AsyncTask<CatchAPI, Void, String[]> {
private ProgressDialog pdia;
private Context context;
private APIParser parser = new APIParser();
public UpdateStats(Context contexts) {
context = contexts;
}
@Override
protected void onPreExecute() {
pdia = new ProgressDialog(context);
pdia.setMessage("Loading...");
pdia.show();
super.onPreExecute();
}
@Override
protected String[] doInBackground(CatchAPI... api) {
String apiOutput = api[0].returnAPI();
return new String[] {
parser.getPoolName(apiOutput),
parser.getHashRate(apiOutput),
parser.getWorkers(apiOutput),
parser.getSharesThisRound(apiOutput)
};
}
@Override
protected void onPostExecute(String[] result) {
pdia.dismiss();
super.onPostExecute(result);
}
}
而且onClickListener在MainActivity:
updateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String[] text = null;
UpdateStats updater = new UpdateStats(context);
try {
text = updater.execute(api).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
poolNameTV.setText(text[0]);
hashRateTV.setText(text[1]);
workersTV.setText(text[2]);
sharesThisRoundTV.setText(text[3]);
}
});
完美,这就是它。谢谢! – DemonWav 2013-05-06 03:09:08
起初它不让我接受它,现在它会。再次感谢。 – DemonWav 2013-05-06 03:19:42