11package com.parse;
22
33import android.util.Log;
4- import android.util.SparseArray;
5-
4+ import bolts.Continuation;
5+ import bolts.Task;
6+ import okhttp3.OkHttpClient;
67import org.json.JSONException;
78import org.json.JSONObject;
89
1314import java.util.Arrays;
1415import java.util.List;
1516import java.util.concurrent.Callable;
17+ import java.util.concurrent.ConcurrentHashMap;
1618import java.util.concurrent.Executor;
1719
18- import bolts.Continuation;
19- import bolts.Task;
20- import okhttp3.OkHttpClient;
21-
2220import static com.parse.Parse.checkInit;
2321
2422/* package */ class ParseLiveQueryClientImpl implements ParseLiveQueryClient {
2826 private final Executor taskExecutor;
2927 private final String applicationId;
3028 private final String clientKey;
31- private final SparseArray< Subscription<? extends ParseObject>> subscriptions = new SparseArray <>();
29+ private final ConcurrentHashMap<Integer, Subscription<? extends ParseObject>> subscriptions = new ConcurrentHashMap <>();
3230 private final URI uri;
3331 private final WebSocketClientFactory webSocketClientFactory;
3432 private final WebSocketClient.WebSocketClientCallback webSocketClientCallback;
@@ -87,7 +85,7 @@ private static URI getDefaultUri() {
8785 public <T extends ParseObject> SubscriptionHandling<T> subscribe(ParseQuery<T> query) {
8886 int requestId = requestIdGenerator();
8987 Subscription<T> subscription = new Subscription<>(requestId, query);
90- subscriptions.append (requestId, subscription);
88+ subscriptions.put (requestId, subscription);
9189
9290 if (isConnected()) {
9391 sendSubscription(subscription);
@@ -124,8 +122,7 @@ public void connectIfNeeded() {
124122 @Override
125123 public <T extends ParseObject> void unsubscribe(final ParseQuery<T> query) {
126124 if (query != null) {
127- for (int i = 0; i < subscriptions.size(); i++) {
128- Subscription subscription = subscriptions.valueAt(i);
125+ for (Subscription<? extends ParseObject> subscription : subscriptions.values()) {
129126 if (query.equals(subscription.getQuery())) {
130127 sendUnsubscription(subscription);
131128 }
@@ -136,8 +133,7 @@ public <T extends ParseObject> void unsubscribe(final ParseQuery<T> query) {
136133 @Override
137134 public <T extends ParseObject> void unsubscribe(final ParseQuery<T> query, final SubscriptionHandling<T> subscriptionHandling) {
138135 if (query != null && subscriptionHandling != null) {
139- for (int i = 0; i < subscriptions.size(); i++) {
140- Subscription subscription = subscriptions.valueAt(i);
136+ for (Subscription<? extends ParseObject> subscription : subscriptions.values()) {
141137 if (query.equals(subscription.getQuery()) && subscriptionHandling.equals(subscription)) {
142138 sendUnsubscription(subscription);
143139 }
@@ -230,8 +226,8 @@ private void parseMessage(String message) throws LiveQueryException {
230226 hasReceivedConnected = true;
231227 dispatchConnected();
232228 Log.v(LOG_TAG, "Connected, sending pending subscription");
233- for (int i = 0; i < subscriptions.size(); i++ ) {
234- sendSubscription(subscriptions.valueAt(i) );
229+ for (Subscription<? extends ParseObject> subscription : subscriptions.values() ) {
230+ sendSubscription(subscription );
235231 }
236232 break;
237233 case "redirect":
0 commit comments