Android java 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

如何将列表从AsyncTask返回到类而不是方法

我有一个异步任务,它连接到一个网页,将网页读入一个字符串,然后将其全部拆分为变量

这是异步任务:

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的活动