http请求的进度条 - 黑莓

时间:2010-08-06 10:53:04

标签: blackberry

在我的项目中我使用带有GaugeField的弹出屏幕来获取http请求。目前我们只是以固定速率递增了gaugefield的值,在http响应之后我们只是删除了弹出屏幕。因此,当规范字段为40%或60%时,http请求有时会完成。

但我想将gaugefield值与http请求/响应同步。这意味着弹出屏幕将始终以100%删除。

1 个答案:

答案 0 :(得分:2)

我没有在我面前的代码,但几年前我在一个项目中有类似的东西。

我写了一个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 ...
    }
}

我在这里遗漏了很多胆量,但我希望这会让你朝着正确的方向前进。