Java AsyncTask-如何在onPostExecute之后将值传递回activity类?

Java AsyncTask-如何在onPostExecute之后将值传递回activity类?,java,android,Java,Android,这是我的问题。我创建了一个asyncTask来链接到我的数据库,并使用JSON发送和接收信息 @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); progressDialog.dismiss(); returnValues = dataParsed.split("\\s+"); mainActivity.getValue(this is the fun

这是我的问题。我创建了一个asyncTask来链接到我的数据库,并使用JSON发送和接收信息

@Override
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);

    progressDialog.dismiss();
    returnValues = dataParsed.split("\\s+");

    mainActivity.getValue(this is the function that calls anotherfunction in 
    asyncTask)

    Log.v("ARRAY LENGTH", String.valueOf(returnValues.length));
}

public String[] returnmyString(){
    //return mySaveData;
    Log.v("ARRAY LENGTH 2", String.valueOf(returnValues.length));
    return returnValues;
}
我在基于活动的类中创建asyncTask对象,然后调用该对象。execute。我的问题是,一旦调用object.execute,我的代码将继续运行,其中一行在asyncTask类中调用函数,然后再执行所有代码

process.activitySave(1); //<---Process is the object for the asyncTask class
process.ContextSave(this,ServerURLSource,myParameters);
process.execute()
changedData = process.returnmyString(); //<-- this is the line of code that gets implemented that returns a null value

方法1是基本的匿名内部类实现。由于内部AsyncTask类不是静态类,因此您可以从该实现访问
CustomActivity
的属性

在方法2中,AsyncClass单独实现。如果您将活动分配给该类,则可以在执行后回调所需的方法。例如,这个方法是#setChangedData方法。CustomAsyncTask调用#onPostExecute中的#setChangedData

公共类CustomActivity扩展了AppCompatActivity{
字符串mChangedData;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//方法1-将数据更改为匿名实现的AsyncTask类
新建异步任务(){
@凌驾
受保护的Void doInBackground(整数…参数){
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
CustomActivity.this.mchangedata=“foo”;//此操作将mchangedata更改为“foo”
}
}.执行(1);
//方法2-将数据更改为自定义AsyncTask类
新建CustomAsyncTask(此)。执行(2);
}
public void setChangedData(字符串changedData){
this.mChangedData=changedData;
}
静态类CustomAsyncTask扩展了AsyncTask{
顾客活动性;
公共CustomAsyncTask(CustomActivity活动){
这个。活动=活动;
}
@凌驾
受保护的Void doInBackground(整数…参数){
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
mActivity.setChangedData(“bar”);
}
}
}
而且,作为方法3,如果您想更松散地分离活动和异步任务,这是handler方法:

公共类CustomActivity扩展了AppCompatActivity{
私有字符串mChangedData;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
CustomAsyncTask任务=新建CustomAsyncTask();
task.setOnDataChangedListener(新的CustomAsyncTask.OnDataChangedListener(){
@凌驾
公共无效数据已更改(字符串数据){
mChangedData=数据;
}
});
任务执行(1);
}
私有静态类CustomAsyncTask扩展了AsyncTask{
私有OnDataChangedListener OnDataChangedListener;
@凌驾
受保护的Void doInBackground(整数…参数){
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
如果(onDataChangedListener!=null){
onDataChangedListener.onDataChanged(“foo”);
}
}
void setOnDataChangedListener(OnDataChangedListener OnDataChangedListener){
this.onDataChangedListener=onDataChangedListener;
}
接口OnDataChangedListener{
void onDataChanged(字符串数据);
}
}
}

您需要一个回调方法。任务x完成后,使用将反馈作为参数的方法将结果传递给活动。嘿,你能进一步解释这种类型的功能吗?task x将是process.execute,但我将使用什么回调方法以及将它放在哪里?那么我将使用什么样的方法来获得反馈呢?为什么不简单地将
changedData
设置为
onPostExecute
@RW6?onPostExecute方法在您调用#execute方法的同一线程上运行。因为我仍然需要一种方法将该值从asyncTask类返回到MainActivity类,除非我没有得到某些内容。您需要一个activity实例和activity中的公共方法。您将参数传递给方法(结果),方法在活动中执行任何操作
public String[] returnmyString(){
    //return mySaveData;
    Log.v("ARRAY LENGTH", String.valueOf(returnValues.length));
    return returnValues;
}