1

内部クラスの Hashmap 変数にアクセスしたい 外部クラス メソッドは、スピナーの項目選択リスナーを意味します。内部クラス内でハッシュマップを宣言し、内部クラスメソッド内でハッシュマップに値を割り当てています。外部クラスから setOnItemSelectedListener のキーを使用してハッシュマップ値にアクセスしていますが、ハッシュマップで null 値を取得しました。
外側のクラスでハッシュマップを静的にし、値を内側のクラスに入れ、外側のクラスのリスナーから再びアクセスしましたが、再びnull値を取得しました。誰かが別の解決策を持っている場合は教えてください。ここで少し混乱しています。どこが間違っているのかわかりません。どなたか解決策をお願いします。

以下は外部クラスと内部クラスです

public class ProjectDetailActivity extends SherlockActivity {

// declare hashmap.
HashMap<String, String> phaseIdKv = new HashMap<String, String>();
@Override
protected void onCreate(Bundle savedInstanceState) {

    new LoadPhaseData().execute(projId);
    //create variable of inner class
    final ProjectDetailActivity.LoadPhaseData inner = new ProjectDetailActivity().new LoadPhaseData(); 

   //Listener for Phase spinner

    projSpinnerPhase.setOnItemSelectedListener((OnItemSelectedListener) new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {

            int id = projSpinnerPhase.getSelectedItemPosition();
            ++id;
            String p_id= inner.phaseIdKv.get(id); //Here I want to access inner class hashmap value
            Log.v("hashmap value","-"+inner.phaseIdKv.get(id));//getting null

            Toast.makeText(getApplicationContext(),"item-"+id+" item2"+item+"p_id"+p_id, Toast.LENGTH_LONG).show();
        }

    });     
}
private class LoadPhaseData extends AsyncTask<String, Void, Void> {


    @Override
    protected Void doInBackground(String... params) {
        -----
        JSONArray phaseData = new JSONArray(jsonpPhaseList);
            String [] phaseNo = new String[jsonpPhaseList.length()];
            String phase;
            String phaseId1;
            if (phaseData.length() >0) {
                for(int i =0;i<phaseData.length();i++){
                    JSONObject joPhasefromJa = phaseData.getJSONObject(i);

                    phase = joPhasefromJa.getString("phase_no")
                    phaseId1 = joPhasefromJa.getString("phase_id");

                    phaseIdKv.put(phase,phaseId1);                  
                }
            }
        return null;
    }
4

2 に答える 2

1

問題は、phaseNo[index] が初期化されていないことです。そのヌル。あなたのキーはnullです

また

     HashMap<String, String> phaseIdKv = new HashMap<String, String>();

キーと値のペアを文字列として持つハッシュマップ

      //phaseNo is a string array.
      for(int i =0;i<phaseData.length();i++){ 
       phase = joPhasefromJa.getString("phase_no")
       phaseId1 = joPhasefromJa.getString("phase_id");
       phaseIdKv.put(phase ,phaseId1);  
      }

取得するため

     int id = projSpinnerPhase.getSelectedItemPosition();
     ++id;
     String p_id= phaseIdKv.get(String.valueOf(id));// convert int to string
     id should match phase that is the key put in hash map

クラスのどこからでも p_id にアクセスしたい場合は、それを外部クラス変数として宣言します。

于 2013-05-13T09:25:27.227 に答える