Skip to content

Conditional update

Atomically sets the value to the given updated value if the current value == the expected value.

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

// Backendless.Counters approach
public Long Backendless.Counters.compareAndSet( String counterName, 
                                                Number expected, 
                                                Number updated );

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

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

// Backendless.Counters approach
public <T> T Backendless.Counters.compareAndSet( String counterName, 
                                                       Number expected, 
                                                       Number updated, 
                                                       AsyncCallback<T> callback );

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

where:

Argument                Description
counterName name of the counter to compare.
expected the expected value of the counter. If the current value equals the expected value, the counter is set to the "updated" value.
updated the new value to assign to the counter if the current value equals the expected value.
callback the callback used for asynchronous calls to indicate that the operation has either successfully completed or resulted in error.

Example

AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>()
{
  @Override
  public void handleResponse( Boolean result )
  {
    Log.i( "MYAPP", "[ASYNC] value has been updated - " + result );
  }

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

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

IAtomic<Integer> myCounter = Backendless.Counters.of( "my counter", Integer.class );
boolean result = myCounter.compareAndSet( 1000, 2000 );
Log.i( "MYAPP", "[SYNC] value has been updated - " + result );