@@ -158,88 +158,90 @@ public void writeTo(final OutputStream out) throws IOException {
158158 Set <String > keys = jsonParams .keySet ();
159159
160160 int keysCount = keys .size ();
161- int keysProcessed = -1 ;
162- boolean isFileWrapper ;
163-
164- // Go over all keys and handle each's value.
165- for (String key : keys ) {
166- // Indicate that this key has been processed.
167- keysProcessed ++;
168-
169- try {
170- // Evaluate the value (which cannot be null).
171- Object value = jsonParams .get (key );
172-
173- // Write the JSON object's key.
174- os .write (escape (key ));
175- os .write (':' );
176-
177- // Bail out prematurely if value's null.
178- if (value == null ) {
179- os .write (JSON_NULL );
180- } else {
181- // Check if this is a FileWrapper.
182- isFileWrapper = value instanceof RequestParams .FileWrapper ;
183-
184- // If a file should be uploaded.
185- if (isFileWrapper || value instanceof RequestParams .StreamWrapper ) {
186- // All uploads are sent as an object containing the file's details.
187- os .write ('{' );
188-
189- // Determine how to handle this entry.
190- if (isFileWrapper ) {
191- writeToFromFile (os , (RequestParams .FileWrapper ) value );
161+ if (0 < keysCount ) {
162+ int keysProcessed = 0 ;
163+ boolean isFileWrapper ;
164+
165+ // Go over all keys and handle each's value.
166+ for (String key : keys ) {
167+ // Indicate that this key has been processed.
168+ keysProcessed ++;
169+
170+ try {
171+ // Evaluate the value (which cannot be null).
172+ Object value = jsonParams .get (key );
173+
174+ // Write the JSON object's key.
175+ os .write (escape (key ));
176+ os .write (':' );
177+
178+ // Bail out prematurely if value's null.
179+ if (value == null ) {
180+ os .write (JSON_NULL );
181+ } else {
182+ // Check if this is a FileWrapper.
183+ isFileWrapper = value instanceof RequestParams .FileWrapper ;
184+
185+ // If a file should be uploaded.
186+ if (isFileWrapper || value instanceof RequestParams .StreamWrapper ) {
187+ // All uploads are sent as an object containing the file's details.
188+ os .write ('{' );
189+
190+ // Determine how to handle this entry.
191+ if (isFileWrapper ) {
192+ writeToFromFile (os , (RequestParams .FileWrapper ) value );
193+ } else {
194+ writeToFromStream (os , (RequestParams .StreamWrapper ) value );
195+ }
196+
197+ // End the file's object and prepare for next one.
198+ os .write ('}' );
199+ } else if (value instanceof JsonValueInterface ) {
200+ os .write (((JsonValueInterface ) value ).getEscapedJsonValue ());
201+ } else if (value instanceof org .json .JSONObject ) {
202+ os .write (((org .json .JSONObject ) value ).toString ().getBytes ());
203+ } else if (value instanceof org .json .JSONArray ) {
204+ os .write (((org .json .JSONArray ) value ).toString ().getBytes ());
205+ } else if (value instanceof Boolean ) {
206+ os .write ((Boolean ) value ? JSON_TRUE : JSON_FALSE );
207+ } else if (value instanceof Long ) {
208+ os .write ((((Number ) value ).longValue () + "" ).getBytes ());
209+ } else if (value instanceof Double ) {
210+ os .write ((((Number ) value ).doubleValue () + "" ).getBytes ());
211+ } else if (value instanceof Float ) {
212+ os .write ((((Number ) value ).floatValue () + "" ).getBytes ());
213+ } else if (value instanceof Integer ) {
214+ os .write ((((Number ) value ).intValue () + "" ).getBytes ());
192215 } else {
193- writeToFromStream ( os , ( RequestParams . StreamWrapper ) value );
216+ os . write ( escape ( value . toString ()) );
194217 }
195-
196- // End the file's object and prepare for next one.
197- os .write ('}' );
198- } else if (value instanceof JsonValueInterface ) {
199- os .write (((JsonValueInterface ) value ).getEscapedJsonValue ());
200- } else if (value instanceof org .json .JSONObject ) {
201- os .write (((org .json .JSONObject ) value ).toString ().getBytes ());
202- } else if (value instanceof org .json .JSONArray ) {
203- os .write (((org .json .JSONArray ) value ).toString ().getBytes ());
204- } else if (value instanceof Boolean ) {
205- os .write ((Boolean ) value ? JSON_TRUE : JSON_FALSE );
206- } else if (value instanceof Long ) {
207- os .write ((((Number ) value ).longValue () + "" ).getBytes ());
208- } else if (value instanceof Double ) {
209- os .write ((((Number ) value ).doubleValue () + "" ).getBytes ());
210- } else if (value instanceof Float ) {
211- os .write ((((Number ) value ).floatValue () + "" ).getBytes ());
212- } else if (value instanceof Integer ) {
213- os .write ((((Number ) value ).intValue () + "" ).getBytes ());
214- } else {
215- os .write (escape (value .toString ()));
216218 }
217- }
218- } finally {
219- // Separate each K:V with a comma, except the last one.
220- if ( elapsedField != null || keysProcessed < keysCount ) {
221- os . write ( ',' );
219+ } finally {
220+ // Separate each K:V with a comma, except the last one.
221+ if ( elapsedField != null || keysProcessed < keysCount ) {
222+ os . write ( ',' );
223+ }
222224 }
223225 }
224- }
225226
226- // Calculate how many milliseconds it took to upload the contents.
227- long elapsedTime = System .currentTimeMillis () - now ;
227+ // Calculate how many milliseconds it took to upload the contents.
228+ long elapsedTime = System .currentTimeMillis () - now ;
228229
229- // Include the elapsed time taken to upload everything.
230- // This might be useful for somebody, but it serves us well since
231- // there will almost always be a ',' as the last sent character.
232- if (elapsedField != null ) {
233- os .write (elapsedField );
234- os .write (':' );
235- os .write ((elapsedTime + "" ).getBytes ());
230+ // Include the elapsed time taken to upload everything.
231+ // This might be useful for somebody, but it serves us well since
232+ // there will almost always be a ',' as the last sent character.
233+ if (elapsedField != null ) {
234+ os .write (elapsedField );
235+ os .write (':' );
236+ os .write ((elapsedTime + "" ).getBytes ());
237+ }
238+
239+ Log .i (LOG_TAG , "Uploaded JSON in " + Math .floor (elapsedTime / 1000 ) + " seconds" );
236240 }
237241
238242 // Close the JSON object.
239243 os .write ('}' );
240244
241- Log .i (LOG_TAG , "Uploaded JSON in " + Math .floor (elapsedTime / 1000 ) + " seconds" );
242-
243245 // Flush the contents up the stream.
244246 os .flush ();
245247 AsyncHttpClient .silentCloseOutputStream (os );
0 commit comments