Java 如何从另一个类访问内部AsyncTask类并检索其结果

Java 如何从另一个类访问内部AsyncTask类并检索其结果,java,android,android-asynctask,Java,Android,Android Asynctask,这里的新手,我正试图从内部调用AsyncTask,如下所示,但它不起作用。谁能给我指一下正确的方向吗?当我从card1调用方法setcrowdstitle时,这没关系,但在尝试从AsyncTask类设置它时就不行了 class Card extends CardBase { public void setCrowdTitle(String cTitle) { CardHeader header = new CardHeader(getContext()); header.set

这里的新手,我正试图从内部调用
AsyncTask
,如下所示,但它不起作用。谁能给我指一下正确的方向吗?当我从
card1
调用方法
setcrowdstitle
时,这没关系,但在尝试从
AsyncTask
类设置它时就不行了

class Card extends CardBase {

public void setCrowdTitle(String cTitle) {
    CardHeader header = new CardHeader(getContext());
    header.setTitle(cTitle);
    header.setButtonExpandVisible(true);
    addCardHeader(header);
}

public class HttpAsyncTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {

        return GET(urls[0]);
        }

        @Override
        protected void onPostExecute(String result) {

        }
}
}

class Activity {

private class LoaderAsyncTask extends AsyncTask<Void, Void,  ArrayList<Card>> {
    @Override
    protected ArrayList<Card> doInBackground(Void... params) {

        if (isAdded()) {
            ArrayList<Card> cards = initcrowdCard();
            return cards;
        } else
            return null;
    }

    @Override
    protected void onPostExecute(ArrayList<Card> cards) {

        onRefreshComplete(cards);
}

private ArrayList<Card> initcrowdCard() {

    ArrayList<Card> cards = new ArrayList<>();

    Card card1 = new Card(this.getActivity(), R.layout.crowd_card);
    card1.setCrowdSubtitle("Url");
    cards.add(card1);

    Card card2 = new Card(this.getActivity(), R.layout.crowd_card);
    card2.new HttpAsyncTask() {
        @Override
        public void onPostExecute(String picUrl) {
            card2.setCrowdSubtitle(picUrl);
        }
    }.execute(phpScript);
   cards.add(card2);
}
}
class卡扩展了CardBase{
公共void setCrowdTitle(字符串cTitle){
CardHeader header=新的CardHeader(getContext());
标题.设置标题(cTitle);
header.setButtonExpandVisible(true);
addCardHeader(标题);
}
公共类HttpAsyncTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…URL){
返回GET(url[0]);
}
@凌驾
受保护的void onPostExecute(字符串结果){
}
}
}
课堂活动{
私有类LoaderAsyncTask扩展异步任务{
@凌驾
受保护的ArrayList doInBackground(无效…参数){
if(isAdded()){
ArrayList cards=initcrowdCard();
回程卡;
}否则
返回null;
}
@凌驾
受保护的void onPostExecute(ArrayList卡){
完成(卡片);
}
私有ArrayList initcrowdCard(){
ArrayList cards=新的ArrayList();
Card card1=新卡(this.getActivity(),R.layout.crowd_卡);
card1.setCrowdSubtitle(“Url”);
卡片。添加(卡片1);
Card card2=新卡(this.getActivity(),R.layout.crowd_卡);
card2.new HttpAsyncTask(){
@凌驾
public void onPostExecute(字符串picUrl){
card2.setCrowdSubtitle(picUrl);
}
}.execute(phpScript);
卡片。添加(卡片2);
}
}

什么代码行不起作用?在类
中定义的
setCrowdSubtitle()
在哪里?@Talha编辑代码以包含
setCrowdSubtitle()
方法。@NAIT不起作用的代码段是
Card card2=新卡(this.getActivity(),R.layout.crowd\u Card);card2.new HttpAsyncTask(){@Override public void onPostExecute(String picUrl){card2.setcrowdstitle(picUrl);}}.execute(phpScript);cards.add(card2);
为什么要从外部重写
onPostExecute()
呢?我看不出任何具体原因?你可以在
onPostExecute()中调用
setcrowdstitle
HttpAsyncTask
,它可能会在您需要将
setCrowdSubtitle
声明为final的地方引发错误。另外
card2.new HttpAsyncTask(){…
这一行是否会出现错误或意外行为?您指定了两行,它们可能是不同的错误,也会发布堆栈跟踪(错误日志)。哪一行代码不起作用?在类
Card
中定义的
setCrowdSubtitle()
在哪里?@Talha编辑代码以包含
setCrowdSubtitle()
方法。@NAIT不起作用的代码是
Card card2=新卡(this.getActivity(),R.layout.crowd\u Card);card2.new HttpSyncTask(){@Override public void onPostExecute(String picUrl){card2.setcrowdstitle(picUrl);}}.execute(phpScript);cards.add(card2);
为什么要从外部重写
onPostExecute()
呢?我看不出任何具体原因?你可以在
onPostExecute()中调用
setcrowdstitle
HttpAsyncTask
,它可能会在需要将
setcrowdstitle
声明为最终的地方引发错误。另外
card2.new HttpAsyncTask(){…
这一行是否会出现错误或意外行为?您指定了两行,它们可能是不同的错误,也会发布堆栈跟踪(错误日志)。