从AsyncTask类onPostExecute方法返回值

Jac*_*k-V 9 android return-value android-asynctask

好的,现在我有Class A一些包含一些微调器,这些值将由Class B扩展填充,AsnycTask从Web服务中获取微调器值.在B类中,我设法检索值,在Toast中显示.现在的问题是如何将这些微调器值传递回A类?

我试过了

AsyncTask RETURN值中的OnPostExcecute方法可以吗?

通过传递Class AClass B并存储该值在公共变量Class A象下面

@Override
protected void onPostExecute(String result)
{
  classA.classAvariable = result;
}
Run Code Online (Sandbox Code Playgroud)

然而,每当我尝试阅读时,classAvariable我总会得到一个NullPointer Exception.似乎变量从未分配过结果.出于可读性目的,我需要分开Class B而不是用作内联类.

我的Java程序员是什么想法?

Ner*_*een 33

我猜你正在尝试在设置之前读取A类变量.尝试使用回调函数来执行它.在回调函数中传递值并刷新你的微调器..

您可以创建interface,将其传递给AsyncTask(在构造函数中),然后调用方法onPostExecute

例如:

你的界面:

public interface OnTaskCompleted{
    void onTaskCompleted(values);
}
Run Code Online (Sandbox Code Playgroud)

你的活动:

public YourActivity implements OnTaskCompleted{
    //your Activity
    YourTask  task = new YourTask(this); // here is the initalization code for your asyncTask
}
Run Code Online (Sandbox Code Playgroud)

而你的AsyncTask:

public YourTask extends AsyncTask<Object,Object,Object>{ //change Object to required type
    private OnTaskCompleted listener;

    public YourTask(OnTaskCompleted listener){
        this.listener=listener;
    }

    //required methods

    protected void onPostExecute(Object o){
        //your stuff
        listener.onTaskCompleted(values);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 它是一种回调函数,它不是将活动传递给任务,而是在任务完成时传递一个监听器(如按钮监听器),它调用回调(调用实现此回调的活动)然后活动做它想要的 (2认同)

Ali*_*ran 0

创建一个像这样的接口,OnCompletRequest()然后将其传递给 ClassB 构造函数,然后简单地调用该接口内的方法,例如complete(yourList list) 在方法中onPostExecute(String result)