0

ハッシュマップにいくつかのキーと値のペアを追加します。

キーと値のペアを追加した後、ハッシュマップのサイズを出力すると、サイズが 1 になります。別の場所で値を出力すると (キーとハッシュマップに値を追加した後)、ハッシュマップのサイズがゼロになります。このハッシュマップに追加された値を、このクラスまたは他の外部クラスから削除しません。では、どのようにしてハッシュマップのサイズがゼロになるのでしょうか? 誰か説明してくれませんか?

どんな助けでも大歓迎です。

ここにコード:

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

一般的な 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 に答える
1

ICommonResultCallback() は、コールバック関数のように見えます。そうである場合、この関数が呼び出されたときに hashmap が再度初期化されます。これは、クラスの新しいインスタンスがコールバック用にも作成されるためです。

これは、ハッシュマップを「静的」にすることで確認できます。その後、値を保持する必要があります。

于 2012-11-15T10:02:12.380 に答える