индикатор выполнения для запроса http - Blackberry - PullRequest
0 голосов
/ 06 августа 2010

В моем проекте я использую popupscreen с GaugeField для http-запроса. В настоящее время мы просто увеличиваем значение калибровочного поля с фиксированной скоростью, а после http-ответа мы просто удаляем popupscreen. таким образом, иногда http-запрос завершается, когда в поле датчика указано 40% или 60%.

Но я хочу синхронизировать значение калибровочного поля с http запросом / ответом. это означает, что popupscreen всегда удаляется на 100%.

1 Ответ

2 голосов
/ 06 августа 2010

У меня нет кода передо мной, но я похож на проект несколько лет назад.

Я написал подкласс InputStream, обернутый вокруг объекта InputStream, который я получил от openInputStream(), переопределив все методы read(), чтобы они увеличивали счетчик на количество прочитанных байтов. Всякий раз, когда счетчик достигает определенного порога, он обновляет объект GaugeField, который был передан в конструктор подкласса.

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

public GaugedInputStream extends InputStream
{
    private InputStream _inputStream = null;
    private GaugeField _gaugeField = null;
    private int _counter = 0;
    private int _threshold = 0;

    public void GaugedInputStream(InputStream inputStream, GaugeField gaugeField)
    {
        _inputStream = inputStream;
        _gaugeField = gaugeField;

        ... other constructor stuff ...
    }

    public int read() 
    {
        int byte = _inputStream.read();
        increment(1);
        return byte;
    }

    public int read(byte[] b) 
    {
        int bytes = _inputStream.read(b);
        increment(bytes);
        return bytes;
    }

    public int read(byte[] b, int off, int len)  
    {
        int bytes = _inputStream.read(b, off, len);
        increment(bytes);
        return bytes;
    }

    ... override other InputStream methods here ...

    private void increment(int bytes)
    {
        _counter = _counter + bytes;
        _threshold = _threshold + bytes;
        updateGaugeIfNeeded();
    }

    private void updateGaugeIfNeeded()
    {
        if (_threshold > 100)
        {
            updateGauge();
            _threshold = 0;
        }
    }

    private void updateGauge()
    {
        ... code to update the gauge ...
    }
}

Я оставляю здесь много смелости, но я надеюсь, что это направит вас в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...