0

私はこのようなコードを持っています

@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​​) でアイテムを入力しており、ボタンがアクティビティにあるためです。では、ボタンがクリックされたときにどうすればそれを行うことができ、次に OrgaLevelTask​​ と SubOrgaLevelTask​​ で定義されたマップから値を取得できますか?

ありがとう

4

1 に答える 1

0

まあ、orgaLevelTask​​ でそれらを公開して、簡単にアクセスできます。orgaLevelTask​​ は、アクティビティ クラスの変数である必要があります。試してみましたか?エラーはありますか?

orgaLevelTask​​ メンバーがスレッドセーフな方法でアクセスされることを確認する必要があります

于 2012-07-16T13:52:50.087 に答える