返回值在AsyncTask的onPostExecute方法中获得

时间:2015-06-04 19:36:48

标签: android android-asynctask hashmap

所以我从另一个checkbetoutcome()拨打activity。我的目标是执行AsyncTask并返回finaloutcomes方法中填充的onPostExecute()变量。我是如何实现这一点的,因为finaloutcomes在后​​台运行而返回AsyncTask,代码在{ {1}}方法已完成?

finaloutcomes

** Check_Bet.java

onPostExecute

**

2 个答案:

答案 0 :(得分:1)

正如您已经知道AysncTask以异步方式运行,因此new LoadAllGamet().execute();将立即返回,因此finaloutcomes将保留最终值,无论您存储在其中。

对于您想要更新调用者(AsyncTask)组件(例如,一个Activity)的情况,您应该使用侦听器。

请参阅帖子here,了解如何定义和使用侦听器,基本上是AsyncTask中定义的接口,其方法由调用者组件实现(例如Activity )使用适当的参数(您在onPostExecute中获得的值并传递给Activity)。

希望这有帮助!

答案 1 :(得分:1)

创建界面

public interface onResultListener {
    void showResult(String finalOutcome);
}

活动实现界面

public MyActivity extends Activity implements onResultListener {
    public void getResult() {
        new LoadAllGamet(this).execute();
    }

    void showResult(String finalOutcome){
        // result from your asynctask  
    }
} 

从AsyncTask调用接口方法

 public class LoadAllGamet extends AsyncTask<String, String, String> {
    onResultListener listener;
    public LoadAllGamer(OnResultListenre listr) {
    listener = listr;

    @Override
    protected void onPostExecute(String param) {

        Log.d("SIZE",Integer.toString(allbetsmap.size()));
        //ArrayList<Map<String,String>> allbetsmap = new ArrayList<>();
        //ArrayList<Map<String,String>> passtocheck = new ArrayList<>();

        if (allbetsmap.size() == passtocheck.size()) {
            for (int i = 0; i < allbetsmap.size();i++) {
                if (allbetsmap.get(i).size() == passtocheck.get(i).size()) {
                    String finaloutcome = "won";
                    for (String a : allbetsmap.get(i).keySet()) {
                        String f = allbetsmap.get(i).get(a);
                        if(f.equals("null")) {
                            finaloutcome = "open";
                        }
                        else if (! (f.equals(passtocheck.get(i).get(a)))) {
                            finaloutcome = "lost";
                            break;
                        }
                    }
                    finaloutcomes.put(Integer.toString(i),finaloutcome);
                }
            }
        }
        Log.d("Vital",finaloutcomes.toString());
         lister.showResult(finalOutCome);
    }
}