[英]how to access inner class variable in outer class method in java
我想在外部類方法中訪問內部類Hashmap變量,這意味着項選擇了微調器的偵聽器。 我在內部類內部聲明了Hashmap,並且在內部類方法內部的Hashmap中分配了值。 我正在使用來自外部類的setOnItemSelectedListener中的鍵訪問哈希圖值,但哈希表中的值為空。
我在外部類中使hashmap靜態化,然后將值放入內部類中,並再次從外部類偵聽器進行訪問,但再次獲得空值。 如果有人有其他解決方案,請告訴我。 我在這里有點困惑。我不知道我哪里錯了。 請任何人有解決方案。
以下是外部和內部類
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;
}
在外部作用域中聲明要訪問的變量
public class ProjectDetailActivity extends SherlockActivity {
String p_id;
...
projSpinnerPhase.setOnItemSelectedListener((OnItemSelectedListener) new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
int id = projSpinnerPhase.getSelectedItemPosition();
++id;
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();
}
});
....
}
問題是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,請將其聲明為一個外部類變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.