Joh*_*ket 0 android android-asynctask
无论如何使用AsyncTask而不传入任何参数?我目前正在传递一个空字符串,但我没有做任何事情:
DownloadWebPageTask task = new DownloadWebPageTask();
task.execute(new String[] { "" });
class DownloadWebPageTask extends AsyncTask<String, Void, String> {
private final ProgressDialog dialog = new ProgressDialog(MainScreen.this);
@Override
protected void onPreExecute() {
dialog.setMessage("Gathering data for\n"+selectedSportName+".\nPlease wait...");
dialog.show();
}
@Override
protected String doInBackground(String... urls) {
//go do something
return "";
}
@Override
protected void onPostExecute(String result) {
dialog.dismiss();
startTabbedViewActivity();
}
}
private void startTabbedViewActivity(){
Intent intent = new Intent(MainScreen.this, TabbedView.class);
intent.putExtra(SPORT_NAME_EXTRA, selectedSportName);
intent.putExtra(HEADLINES_FOR_SPORT_EXTRA, existingSportHeadlines.get(selectedSportName));
intent.putExtra(SCORES_FOR_SPORT_EXTRA, existingSportScores.get(selectedSportName));
intent.putExtra(SCHEDULE_FOR_SPORT_EXTRA, existingSportSchedule.get(selectedSportName));
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当我运行如图所示的代码时,doInBackground()中没有任何事情发生,对话框消失,TabbedView活动启动.
但是,当我使用doInBackground()运行某些代码时,对话框会消失,但TabbedView活动将无法启动.所以我想知道我是否可以做任何不同的事情?
是的,您可以使用AsyncTask而不传递String给doInBackground()方法.
只需将第一个和第三个泛型类型更改String为Void:
class DownloadWebPageTask extends AsyncTask<Void, Void, Void> {
}
Run Code Online (Sandbox Code Playgroud)
异步任务使用的三种类型如下:
1)Params,执行时发送给任务的参数类型.
2)进度,期间发布的进度单位的类型
3)背景计算.结果,后台计算结果的类型.
为了签名onPostExecute尝试这个:
@Override
protected void onPostExecute(Void unused) {
}
Run Code Online (Sandbox Code Playgroud)
编辑:
对于参数,它实际上非常简单.
考虑一下:
class MyTask extends AsyncTask<Type1, Type2, Type3> {
@Override
protected void onPreExecute() {
}
@Override
protected Type3 doInBackground(Type1... param) {
}
@Override
protected void onProgressUpdate(Type2... progress) {
}
@Override
protected void onPostExecute(Type3 result) {
}
}
Run Code Online (Sandbox Code Playgroud)
为了确定Type1,Type2和Type3应该是什么,你将不得不问自己3个问题:
我应该将什么参数传递给我的任务?=> Type1
在处理过程中需要显示的中间结果的类型是什么?=>
Type2
结果操作的类型是什么?=> Type3
在您的情况下,我不知道您正在下载数据的URL是全局定义还是要将其传递给任务.如果它是全局定义的,那么Type1不应该是Void.
如果要将其传递给任务,则可以将其传递给doInBackground()方法,Type1将为String.
显然,对于你的情况,你不需要担心Type2,因为你没有发布任何中间结果,因为你没有做任何结果,onPostExecute()所以Type3也是Void如此.
总结一下,你将拥有:
class DownloadWebPageTask extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... urls) {
// do something with urls[0]
}
@Override
protected void onPostExecute(Void unused) {
// dismiss pd and start new intent
}
}
Run Code Online (Sandbox Code Playgroud)
要么:
class DownloadWebPageTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... unused) {
}
@Override
protected void onPostExecute(Void unused) {
// dismiss pd and start new intent
}
}
Run Code Online (Sandbox Code Playgroud)
根据您的需要.那清楚了吗?
| 归档时间: |
|
| 查看次数: |
1814 次 |
| 最近记录: |