Data queries handleResponse called twice

I am calling Backendless.Data.of and it calls the callback twice with different data sets,resulting in inconsistent behaviour.Code:Log.i(TAG, “queryGiftCards() starting”);BackendlessDataManager.getInstance().queryGiftCards(new AsyncCallback<BackendlessCollection<Map>>() {

@Override
public void handleResponse(BackendlessCollection&lt;Map&gt; response) {

    Log.i(TAG, "queryGiftCards() handleResponse");

…public void queryGiftCards(AsyncCallback<BackendlessCollection<Map>> callback) {

Log.i(TAG, "queryGiftCards()");
QueryOptions queryOptions = new QueryOptions();
BackendlessDataQuery dataQuery = new BackendlessDataQuery(GiftCardsManager.COL_ENABLED + " = true");
queryOptions.addSortByOption(GiftCardsManager.COL_PROVIDER_ORDER + " ASC");
queryOptions.addSortByOption(GiftCardsManager.COL_CARD_ORDER + " ASC");
dataQuery.setQueryOptions(queryOptions);
dataQuery.setPageSize(Consts.BACKENDLESS_QUERIES_PAGE_SIZE);
Backendless.Data.of(Consts.TABLE_GIFT_CARDS).find(dataQuery, callback);

}Log:04-23 14:46:05.615 5514-5514/com.tapextreme.freegiftcards.rewards I/DataInitializer: queryGiftCards() starting
04-23 14:46:13.974 5514-5514/com.tapextreme.freegiftcards.rewards I/DataInitializer: queryGiftCards() handleResponse
04-23 14:46:14.725 5514-5514/com.tapextreme.freegiftcards.rewards I/DataInitializer: queryGiftCards() handleResponse
Also the data returns 13 rows in the first callback and then showing totalObjects=13 but dataSize=0 the second(see print screen)

attached print screen

response.png

What does BackendlessDataManager.getInstance() look like?

a simple singletone:

private static BackendlessDataManager mInstance = null;

private void BackendlessDataManager(){}

public static BackendlessDataManager getInstance() {

if (mInstance == null) {
    mInstance = new BackendlessDataManager();
}

return mInstance;

}

The only way a callback can be invoked twice is when the API is invoked twice. Have you confirmed with debugger or by studying the log that the API call happens only once?

Yes. it is clear from the code and the log:

public void queryGiftCards() {

Log.i(TAG, "queryGiftCards() starting");

BackendlessDataManager.getInstance().queryGiftCards(new AsyncCallback&lt;BackendlessCollection&lt;Map&gt;>() {

    private boolean firstResponse = true;

    @Override
    public void handleResponse(BackendlessCollection&lt;Map&gt; response) {

            Log.i(TAG, "queryGiftCards() handleResponse");
        GiftCardsManager giftCardsManager = GiftCardsManager.getInstance();

        if (firstResponse) {
            Log.i(TAG, "Total giftCards - " + response.getTotalObjects());
            firstResponse = false;
            giftCardsManager.clearGiftCards();
        }

        int size = response.getCurrentPage().size();

        if (size > 0) {
            List&lt;Map&gt; retData = response.getData();
            for (Map currGiftCardMap : retData) {

                GiftCard currGiftCard = new GiftCard(
                        (String) currGiftCardMap.get(GiftCardsManager.COL_PROVIDER),
                        (int) currGiftCardMap.get(GiftCardsManager.COL_DOLLAR_VALUE),
                        (int) currGiftCardMap.get(GiftCardsManager.COL_DISCOUNT_PERCNTAGE),
                        (int) currGiftCardMap.get(GiftCardsManager.COL_COIN_PRICE),
                        (int) currGiftCardMap.get(GiftCardsManager.COL_COIN_PRICE_AFTER_DISCOUNT),
                        (int) currGiftCardMap.get(GiftCardsManager.COL_PROVIDER_ORDER),
                        (int) currGiftCardMap.get(GiftCardsManager.COL_CARD_ORDER),
                        (String) currGiftCardMap.get(GiftCardsManager.COL_SPREAD),
                        (String) currGiftCardMap.get(GiftCardsManager.COL_ICON_URL),
                        (boolean) currGiftCardMap.get(GiftCardsManager.COL_ENABLED)
                );

                giftCardsManager.addGiftCard(currGiftCard);

/*
if (!giftCardsManager.isGiftCardIconExists(currGiftCard.getIconUrl())) {
fetchGiftCardProviderIcon(currGiftCard.getIconUrl());
}
*/
}
response.nextPage(this);
} else {

            //adNetworksManager.setIsInitialized(true);
            mOperationsStatus.put(OP_QUERY_GIFT_CARDS, true);
            notifyIfInitFinished();
        }
        Log.i(TAG, "queryGiftCards() Response handled");

    }

    @Override
    public void handleFault(BackendlessFault fault) {

        Log.e(TAG, "Error while loading giftCards: " + fault.getMessage());
        mOperationsStatus.put(OP_QUERY_GIFT_CARDS, true);
        notifyIfInitFinished();
    }
});

}from BackendlessDataManager:public void queryGiftCards(AsyncCallback<BackendlessCollection<Map>> callback) {

Log.i(TAG, "queryGiftCards()");
QueryOptions queryOptions = new QueryOptions();
BackendlessDataQuery dataQuery = new BackendlessDataQuery(GiftCardsManager.COL_ENABLED + " = true");
queryOptions.addSortByOption(GiftCardsManager.COL_PROVIDER_ORDER + " ASC");
queryOptions.addSortByOption(GiftCardsManager.COL_CARD_ORDER + " ASC");
dataQuery.setQueryOptions(queryOptions);
dataQuery.setPageSize(Consts.BACKENDLESS_QUERIES_PAGE_SIZE);
Backendless.Data.of(Consts.TABLE_GIFT_CARDS).find(dataQuery, callback);

}
Log:04-24 17:19:26.118 15274-15274/com.tapextreme.freegiftcards.rewards I/DataInitializer: queryGiftCards() starting
04-24 17:19:26.118 15274-15274/com.tapextreme.freegiftcards.rewards I/BackendlessDataManager: queryGiftCards()
04-24 17:19:27.788 15274-15274/com.tapextreme.freegiftcards.rewards I/DataInitializer: queryGiftCards() handleResponse
04-24 17:19:27.788 15274-15274/com.tapextreme.freegiftcards.rewards I/DataInitializer: queryGiftCards() Response handled
04-24 17:19:29.188 15274-15274/com.tapextreme.freegiftcards.rewards I/DataInitializer: queryGiftCards() handleResponse
04-24 17:19:29.188 15274-15274/com.tapextreme.freegiftcards.rewards I/DataInitializer: queryGiftCards() Response handled

This issue results in inconsistent behavior in viewing the data

Thanks,
Tal

Your second API call is here:

response.nextPage(this);

You are right.

The problem ended up being in android UI.
Thank you for your support, Mark