2010-08-06 146 views
0

在我的項目中,我正在使用帶GaugeField的彈出式屏幕來處理http請求。目前,我們只是用固定速率增加了gaugefield的值,而在http響應之後,我們只刪除彈出屏幕。所以有些時候,當量程字段在40%或60%時,http請求完成。http請求的進度條 - 黑莓

但我想同步標準差值與http請求/響應。這意味着彈出式屏幕將始終以100%的速度移除。

回答

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 ... 
    } 
} 

我離開了很多這裏的膽量,但我希望這將你在正確的方向。

+0

謝謝curt我會嘗試這段代碼。 – Vivart 2010-08-06 19:45:36