Как я могу проверить, занят ли ContentResolver - PullRequest
0 голосов
/ 30 января 2012

У меня есть кнопка, и когда пользователь нажимает эту кнопку, она должна обновить статус данных с указанным идентификатором

public void updateByClick(int id) {
    myCursor.moveToPosition(id);
    if (myCursor.getShort(myCursor.getColumnIndex(MyTable.STATUS)) == 0) {

        ContentValues cv = new ContentValues();
        cv.put(MyTable.STATUS, true);

        getContext().getContentResolver().update(MyTable.CONTENT_URI, cv,
                  MyTable._ID + "= ?", new String[] {String.valueOf(id + 1)});

    }
}

Проблема в том, что если пользователь нажимает кнопку быстро (так что есть много событий updateByClick), то операция обновления вызывает много раз (обновление еще не произошло, поэтому статус все еще == 0)

Как я могу проверить, занят ли ContentResolver (или что-то еще) (в данный момент обновляется), тогда я могу предотвратить множественные вызовы обновления

Ответы [ 2 ]

1 голос
/ 30 января 2012

Простым решением было бы просто игнорировать нажатия кнопок, которые быстро приходят:

long prevTouchTime = 0;
long touchTimeout = 1000;
public void updateByClick(int id) {
   long touchTime = System.currentTimeMillis();
   if (touchTime - prevTouchTime < touchTimeout)
        return;
   prevTouchTime = touchTime;
   //Do everything else
}
1 голос
/ 30 января 2012

Я бы решил это с метками времени.Каждый раз, когда вызывается ваш метод обновления, вы создаете отметку времени с System.currentTimemillis() и проверяете разницу с последней сохраненной отметкой времени.Если он не достигает порогового значения, вы не вызываете запрос на обновление.

...