0

我在哈希图中添加了几个键值对。

添加键值对后,当我打印 hashmap 的大小时,我得到的大小为 1。当我在另一个地方打印值时(将值添加到 key-hashmap 之后),我得到 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
 }
        }
4

2 回答 2

1

ICommonResultCallback() 看起来像一个回调函数。如果是,则在调用此函数时将再次初始化 hashmap。这是因为还为回调创建了一个新的类实例。

您可以通过使用将 hashmap 设置为“静态”来验证这一点。然后它应该保留该值。

于 2012-11-15T10:02:12.380 回答
1

通用 Java 基础知识

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

这里 Context 是您的键,每次都必须是唯一的,否则单个哈希图不包含您的数据,如果您只使用侦听器,为什么不使用 List 或 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
     }
            }
于 2012-11-15T10:23:07.317 回答