Android java AsyncTask返回类而不是方法
如何将列表从AsyncTask返回到类而不是方法 我有一个异步任务,它连接到一个网页,将网页读入一个字符串,然后将其全部拆分为变量 这是异步任务:Android java AsyncTask返回类而不是方法,java,android,list,class,android-asynctask,Java,Android,List,Class,Android Asynctask,如何将列表从AsyncTask返回到类而不是方法 我有一个异步任务,它连接到一个网页,将网页读入一个字符串,然后将其全部拆分为变量 这是异步任务: public class sellableIds_AsyncTask extends AsyncTask<String, Void, List> { String bodyHtml; List<String> items; private Context context; private se
public class sellableIds_AsyncTask extends AsyncTask<String, Void, List> {
String bodyHtml;
List<String> items;
private Context context;
private sellableIdsFilter sellableIdsFilter;
public sellableIds_AsyncTask(Context context) {
this.context = context;
}
public void setSellableIdsFilter(sellableIdsFilter sellableIdsFilter) {
this.sellableIdsFilter = sellableIdsFilter;
}
@Override
protected List doInBackground(String... params) { //Incompatible return type
try {
HttpClient httpClient = new DefaultHttpClient();
HttpGet get = new HttpGet(params[0]);
HttpResponse response = httpClient.execute(get);
bodyHtml = EntityUtils.toString(response.getEntity()).replace("[", "");
;
items = Arrays.asList(bodyHtml.split("\\s*,\\s*"));
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return items;
}
@Override
protected void onPostExecute(List result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
this.sellableIdsFilter.sellableIdsFilter(result);
}
public interface sellableIdsFilter {
public void sellableIdsFilter(List result);
}
}
如何将此列表返回到调用它的活动,并使该列表能够在类中的任何位置使用?改为方法
sellableIdsFilter()代码>创建侦听器接口
public interface OnSellableIdsFilterListener {
void onSellableIdsFilterSuccess(List<Integer> ids);
}
public class SomeClassThatNeedsTheIDs implements OnSellableIdsFilterListener {
void someVoid() {
//Pass the instance of this class to the constructor of the asynctask as a listener
new YourAsyncTask(this, this).execute();
}
@Override
public void onGetSellableIdsFilterSuccess(List<Integer> ids) {
// do whatever you want with the ids
}
}
SellableIDsFilterListener上的公共接口{
在SellableIDsfilterSuccess(列表ID)上无效;
}
使您需要的类实现该接口
public interface OnSellableIdsFilterListener {
void onSellableIdsFilterSuccess(List<Integer> ids);
}
public class SomeClassThatNeedsTheIDs implements OnSellableIdsFilterListener {
void someVoid() {
//Pass the instance of this class to the constructor of the asynctask as a listener
new YourAsyncTask(this, this).execute();
}
@Override
public void onGetSellableIdsFilterSuccess(List<Integer> ids) {
// do whatever you want with the ids
}
}
public类需要在SellableIDSFilterListener上实现ID的某些类{
void someVoid(){
//将此类的实例作为侦听器传递给asynctask的构造函数
新建YourAsyncTask(this,this).execute();
}
@凌驾
公共无效OnGetSellerableIDSFilterSuccess(列表ID){
//你想用身份证做什么都行
}
}
更改asynctask,将侦听器添加到构造函数
public class YourAsyncTask extends AsyncTask< , , > {
Context context;
OnSellableIdsFilterListener listener;
public YourAsyncTask(Context context, OnSellableIdsFilterListener listener) {
this.listener = listener;
this.context = context;
}
// In onPostExecute check if listener!=null and invoke the method, passing the ids
public void onPostExecute() {
if(listener!=null) {
listener.onSellableIdsFilterSuccess(ids);
}
}
}
公共类YourAsyncTask扩展了AsyncTask<,>{
语境;
OnSellableIdsFilterListener侦听器;
公共YourAsyncTask(上下文上下文,OnSellableIdsFilterListener侦听器){
this.listener=listener;
this.context=上下文;
}
//在onPostExecute中,检查listener!=null并调用该方法,传递ID
public void onPostExecute(){
if(侦听器!=null){
listener.onSellableIdsFilterSuccess(ids);
}
}
}
您可以添加一个方法,在“sellableIds\u AsyncTask”类中返回列表“items”。调用asyncTasks execute后,调用get()以确保async task已完成其任务。然后调用getter函数来获取列表“items”。希望这有帮助 在asynctask构造函数中传递activity/fragment,在onPostExecute-done中调用activity/fragment的方法。注意在onCancled()@for3st中删除对它的引用,具体是如何做到的?你能详细说明吗?你能详细说明一下吗?我不完全理解也不知道如何实现它,就像任何普通类一样,这个类可以有返回列表的getter函数。在AsyncTask的情况下,唯一的问题是后台线程正在运行,因此我们需要等待它完成任务。任务完成后,我们可以通过添加的getter函数获得所需的列表。因此,在调用execute()之后,调用asyncTask的get()以确保线程完成其工作,然后调用getter函数以获取列表。需要ID的类需要转到哪里?或者这是我的能力?这是你需要使用ID的活动