2012-11-15 35 views
0

我添加了一些鍵值對的散列映射。在我添加鍵值對之後,當我打印hashmap的大小時,我得到的大小爲1.當我在另一個地方打印值(向key-hashmap添加值之後)時,我得到大小爲hashmap爲零。我不會從這個類或任何其他外部類中刪除添加到此散列表的值。那麼,散列圖大小如何變爲零?有人可以解釋嗎?值自動從散列映射中刪除

任何幫助表示讚賞。

代碼在這裏:

private HashMap <Context,BLEEventListeners> mHashMapCallbacks = new HashMap<Context,BLEEventListeners>(); 
public void startTimeServer(BLEEventListeners eventListener,Context context) { 
    mHashMapCallbacks.put(context, eventListener); 
    Log.d(TAG,"****Inside startTimeServer,mHashMapCallbacks size: " +mHashMapCallbacks.size());// I get 1 as size 
    Intent cmn_intent = new Intent(IServerCommon.class.getName()); 
    Intent time_intent = new Intent(ITimeServer.class.getName()); 
    mContext.bindService(time_intent, time_connection, Context.BIND_AUTO_CREATE); 
    mContext.bindService(cmn_intent, cmn_connection, Context.BIND_AUTO_CREATE); 
} 

private ICommonResultCallback callback = new ICommonResultCallback.Stub() { 
    public void receiveMessage(Bundle value) throws RemoteException { 
     Log.d(TAG,"****Inside connected,mHashMapCallbacks size: " +mHashMapCallbacks.size());// I get 0 as size 
} 
     } 
+2

你'mHashMapCallbacks'領域不是一成不變的。你確信你的班級的同一個實例*正在打印零消息嗎? –

+0

是在'receiveMessage()'之前調用'startTimeServer()'。 – PermGenError

+0

ICommonResultCallback.Stub - 這是一個靜態的內部類?如果是這樣,那麼它不能訪問外部類變量 –

回答

1

ICommonResultCallback()看起來像一個回調函數。如果是這樣,那麼當調用這個函數時,hashmap將被重新初始化。這是因爲您創建了一個新的實例類,用於回叫。

你可以通過使用hashmap「static」來驗證這一點。它應該保留這個價值。

1

常見的Java基礎

private HashMap <Context,BLEEventListeners> mHashMapCallbacks = new HashMap<Context,BLEEventListeners>(); 

這裏語境是你的鑰匙,其必須是唯一的,否則每次一個HashMap中不包含您的數據,如果你只用不用你爲什麼聽者列表或ArrayList中,

,仍然必須做一些與上下文做這樣的事情

private ArrayList<HashMap> tempArray = new ArrayList<HashMap>(); 
    public void startTimeServer(BLEEventListeners eventListener,Context context) { 
     HashMap <Context,BLEEventListeners> mHashMapCallbacks = new HashMap<Context,BLEEventListeners>(); 
     tempArray.add(mHashMapCallbacks); 
     Log.d(TAG,"****Inside startTimeServer,mHashMapCallbacks size: " +mHashMapCallbacks.size());// I get 1 as size 
     Intent cmn_intent = new Intent(IServerCommon.class.getName()); 
     Intent time_intent = new Intent(ITimeServer.class.getName()); 
     mContext.bindService(time_intent, time_connection, Context.BIND_AUTO_CREATE); 
     mContext.bindService(cmn_intent, cmn_connection, Context.BIND_AUTO_CREATE); 
    } 

    private ICommonResultCallback callback = new ICommonResultCallback.Stub() { 
     public void receiveMessage(Bundle value) throws RemoteException { 
      Log.d(TAG,"****Inside connected,Array size: " +tempArray.size());// I get 0 as size 
    } 
      }