0
在我的項目中,我正在使用帶GaugeField的彈出式屏幕來處理http請求。目前,我們只是用固定速率增加了gaugefield的值,而在http響應之後,我們只刪除彈出屏幕。所以有些時候,當量程字段在40%或60%時,http請求完成。http請求的進度條 - 黑莓
但我想同步標準差值與http請求/響應。這意味着彈出式屏幕將始終以100%的速度移除。
在我的項目中,我正在使用帶GaugeField的彈出式屏幕來處理http請求。目前,我們只是用固定速率增加了gaugefield的值,而在http響應之後,我們只刪除彈出屏幕。所以有些時候,當量程字段在40%或60%時,http請求完成。http請求的進度條 - 黑莓
但我想同步標準差值與http請求/響應。這意味着彈出式屏幕將始終以100%的速度移除。
我沒有在我面前的代碼,但幾年前我在項目中類似的東西。
我寫的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 ...
}
}
我離開了很多這裏的膽量,但我希望這將你在正確的方向。
謝謝curt我會嘗試這段代碼。 – Vivart 2010-08-06 19:45:36