如何从活动中访问AsyncTask中定义的值

时间:2012-07-16 13:46:48

标签: android android-asynctask

我有这样的代码

@Override
public void onCreate(Bundle savedInstanceState) {
     addItemsOnSpinnerOrgaLevel();

      btn_getReport.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

            //How can i access map and list defined in orgaLevelTask(AsyncTask)???
             Like
             String option = parent.getItemAtPosition(pos).toString();              
            int orgaCode = orgaLevelMap.get(option);

            // Both are defined in AsyncTask ??

    }); //end of anonymous class

} //end of onCreate()

public void  addItemsOnSpinnerOrgaLevel() {

    orgaLevelTask  = new OrgaLevelTask(AccountReportActivity.this, spinner_orgaLevel, spinner_branch, txt_extra, txt_extra1);       
    orgaLevelTask.execute();

} //end of addItemsOnSpinnerOrgaLevel()

在AsyncTask onPostExecute()方法中我有

@Override
protected void onPostExecute(ArrayList<OrgaLevel> result) {     
    super.onPostExecute(result);                        
    if (result != null) {               
        addItemsOnSpinnerOrgaLevel(result);                                     
    } 
    dialog.dismiss();   
} //end of onPostExecute()

 public void  addItemsOnSpinnerOrgaLevel(ArrayList<OrgaLevel> result) {

    orgaLevelElementslist = new ArrayList<String>();
    orgaLevelElementslist.add("All");
    orgaLevelMap = new HashMap<String, Integer>();
    orgaLevelMap.put("All", 0);

    for (int i=0; i<result.size(); i++) {

        OrgaLevel orgaLevelRecord = (OrgaLevel) result.get(i);
        String key = orgaLevelRecord.getOrgaName();
        String value = orgaLevelRecord.getOrgaCode();

        orgaLevelMap.put(key, Integer.parseInt(value));             
        orgaLevelElementslist.add(key);

    } //end of for()

    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(accountReportActivity, android.R.layout.simple_spinner_item, orgaLevelElementslist);
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner_orgaLevel.setAdapter(dataAdapter);

    setSpinnerOrgaLevelListener();

} //end of addItemsOnSpinnerOrgaLevel()

private void setSpinnerOrgaLevelListener() {

    spinner_orgaLevel.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {             
            String option = parent.getItemAtPosition(pos).toString();               
            int orgaCode = orgaLevelMap.get(option);            
            subOrgaLevelTask  = new SubOrgaLevelTask(accountReportActivity, spinner_branch, orgaCode);      
            subOrgaLevelTask.execute();             

        } //end of onItemSelected()

    }); //end of anonymous class

} //end of setSpinnerOrgaLevelListener()

在subOrgaLevelTask​​中,我也有与此类相同的哈希映射。你可以看到我想要做的是,将一个键值放在微调器中。因此,当我的 btn_getReport 按钮单击时,我将获得所选项目的值。如果全部被选中,那么我得到0,依此类推。这个关键价值的东西是有效的。问题是当 btn_getReport 获得点击时,我怎样才能获得所选项目的值。因为我在后台线程中填充项目(在OrgaLevelTask​​和SubOrgaLevelTask​​中),我的按钮在Activity中。那么当按钮单击时我怎么能这样做,然后我从OrgaLevelTask​​和SubOrgaLevelTask​​中定义的地图中获取值?

由于

1 个答案:

答案 0 :(得分:0)

好吧,在orgaLevelTask​​中公开它们,然后只需访问它们。 orgaLevelTask​​应该是活动类中的变量。你试过吗?有什么错误吗?

您必须确保以线程安全的方式访问orgaLevelTask​​成员