Experimental memory saving json

pull/14/head
Sam Bosley 13 years ago
parent 996614b19d
commit 0622e43ff9

@ -40,6 +40,7 @@ import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.messages.BriefMe;
import com.todoroo.astrid.actfm.sync.messages.ChangesHappened;
import com.todoroo.astrid.actfm.sync.messages.ClientToServerMessage;
import com.todoroo.astrid.actfm.sync.messages.JSONPayloadArray;
import com.todoroo.astrid.actfm.sync.messages.NameMaps;
import com.todoroo.astrid.actfm.sync.messages.ReplayOutstandingEntries;
import com.todoroo.astrid.actfm.sync.messages.ReplayTaskListMetadataOutstanding;
@ -285,17 +286,15 @@ public class ActFmSyncThread {
}
if (!messageBatch.isEmpty() && checkForToken()) {
JSONArray payload = new JSONArray();
JSONPayloadArray payload = new JSONPayloadArray();
MultipartEntity entity = new MultipartEntity();
boolean containsChangesHappened = false;
for (int i = 0; i < messageBatch.size(); i++) {
ClientToServerMessage<?> message = messageBatch.get(i);
JSONObject serialized = message.serializeToJSON(entity);
if (serialized != null) {
boolean success = payload.addMessage(message, entity);
if (success) {
if (message instanceof ChangesHappened)
containsChangesHappened = true;
payload.put(serialized);
syncLog("Sending: " + serialized);
} else {
messageBatch.remove(i);
i--;
@ -303,10 +302,11 @@ public class ActFmSyncThread {
}
if (payload.length() == 0) {
if (payload.getMessageCount() == 0) {
messageBatch.clear();
continue;
}
System.err.println("PAYLOAD: " + payload.toString());
setupNotification();

@ -0,0 +1,41 @@
package com.todoroo.astrid.actfm.sync.messages;
import org.apache.http.entity.mime.MultipartEntity;
import org.json.JSONArray;
import org.json.JSONObject;
public class JSONPayloadArray extends JSONArray {
private final StringBuilder sb = new StringBuilder("["); //$NON-NLS-1$
private int messageCount = 0;
public boolean addMessage(ClientToServerMessage<?> message, MultipartEntity entity) {
try {
JSONObject serialized = message.serializeToJSON(entity);
if (serialized != null) {
sb.append(serialized.toString())
.append(","); //$NON-NLS-1$
messageCount++;
return true;
} else {
return false;
}
} catch (OutOfMemoryError e) {
return false;
}
}
public int getMessageCount() {
return messageCount;
}
public String closeAndReturnString() {
if (messageCount > 0)
sb.deleteCharAt(sb.length() - 1); // Remove final comma
sb.append("]"); //$NON-NLS-1$
return sb.toString();
}
}
Loading…
Cancel
Save