And*_*ndi 2 java android android-asynctask
我已经看到了这个答案: 如何将OnPostExecute()的结果导入主活动,因为AsyncTask是一个单独的类?
但这不是我要问的,因为我的调用类有多个调用AsyncTask.
我想创建一个通用AsyncTask类,它将接受URL并从给定的URL下载内容并返回下载的内容.
例:
public class MyAsyncTask extends AsyncTask<String, Void, String>{
ProgressDialog dialog;
protected void onPreExecute() {
super.onPreExecute();
dialog = ProgressDialog.show(context, "Loading", "Please wait...", true);
}
protected String doInBackground(String... params) {
// do download here
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
dialog.dismiss();
}
}
Run Code Online (Sandbox Code Playgroud)
我有另一个类AsyncTask在不同的场景中调用它
public class MyClass {
public method1(String url) {
String result = new MyAsyncTask().execute(url).get();
}
public method2(String url) {
String result = new MyAsyncTask().execute(url).get();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道使用get()方法会使整个过程成为同步任务.但是我想把结果带回调用类.我也知道,为了防止它,我必须实现一个接口.但是因为我在同一个班级有多个电话,所以不可能.所以有人能给我一个想法来解决这个问题吗?
作为doInBackground背景的作品,同时从活动呼唤你不能在它的返回值得到的结果.
您需要设置一个将使用结果调用的回调.
例如:
interface Callback{
void onResult(String result);
}
Run Code Online (Sandbox Code Playgroud)
让您的活动在此活动中实施
void onResult(String result){
//Do something
}
Run Code Online (Sandbox Code Playgroud)
现在将asyncTask更改为:
public class MyAsyncTask extends AsyncTask<String, Void, String>{
ProgressDialog dialog;
Callback callback;
public MyAsyncTask(Callback callback){
this.callback=callback;
}
protected void onPreExecute() {
super.onPreExecute();
dialog = ProgressDialog.show(context, "Loading", "Please wait...", true);
}
protected String doInBackground(String... params) {
//do download here
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
callback.onResult(result);
dialog.dismiss();
}
}
Run Code Online (Sandbox Code Playgroud)
在从活动开始此任务时:
new MyAsyncTask(new Callback{
void onResult(String result){
//Do something
}
}).execute(url);
Run Code Online (Sandbox Code Playgroud)
因此,当你得到一个响应onResult将被调用
| 归档时间: |
|
| 查看次数: |
4807 次 |
| 最近记录: |