Skip to content

Increment by N, return previous

Atomically adds the given value to the current value and returns the previous value of the counter. It is possible that multiple concurrent client requests may receive the same previous value. This occurs since only the incrementing part of the logic is atomic, the retrieval of the value before it is incremented is not.

// *******************************************
// synchronous methods
// *******************************************

// Backendless.Counters approach
public Long Backendless.Counters.getAndAdd( String counterName, Number value );

// IAtomic approach
IAtomic<T> counter = Backendless.Counters.of( String counterName, Class<? extends T> type );
public T counter.getAndAdd( Number value );

// *******************************************
// asynchronous methods
// *******************************************

// Backendless.Counters approach
public <T> T Backendless.Counters.getAndAdd( String counterName, AsyncCallback<T> callback );

// IAtomic approach
IAtomic<T> counter = Backendless.Counters.of( String counterName, Class<? extends T> type );
public T counter.getAndAdd( Number value, AsyncCallback<T> callback );

where:

Argument                Description
counterName name of the counter to update.
value number to add to the current counter value
type numeric type for the counter values. Can be an instance of Byte.class, Short.class, Integer.class, Float.class, Long.class and Double.class.
callback the callback used for asynchronous calls to indicate that the operation has either successfully completed or resulted in error.

Example

AsyncCallback<Integer> callback = new AsyncCallback<Integer>()
{
  @Override
  public void handleResponse( Integer value )
  {
    Log.i( "MYAPP", "[ASYNC] previous counter value is - " + value );
  }

  @Override
  public void handleFault( BackendlessFault backendlessFault )
  {
    Log.e( "MYAPP", "Error - " + backendlessFault.getMessage() );
  }
};

Backendless.Counters.getAndAdd( "my counter", 2000, callback );

IAtomic<Integer> myCounter = Backendless.Counters.of( "my counter", Integer.class );
int counterValue = myCounter.getAndAdd( 2000 );
Log.i( "MYAPP", "[SYNC] previous counter value is - " + counterValue );

Codeless Reference

codeless_atomic_counters_increment_1_return_previous

where:

Argument                Description
counter name Name of the counter whose value must be incremented.
increment by Specify the number to increment the value by.
return previous value When this box is checked, the operation returns the previous value of the counter.

Returns the previous value of the counter.

Consider the following counter:

codeless_atomic_counters_increment_1_return_previous_2

The example below increments the value of the "CarsParkingLot" by 20. This operation returns 0, since the return previous value box is checked. To avoid confusion, the value was  incremented by 20, even though the return value is 0.

codeless_atomic_counters_increment_n_return_previous_2

The result of this operation will look as shown below after the Codeless logic runs:

codeless_atomic_counters_increment_n_return_previous_3