在我的项目中我使用带有GaugeField的弹出屏幕来获取http请求。目前我们只是以固定速率递增了gaugefield的值,在http响应之后我们只是删除了弹出屏幕。因此,当规范字段为40%或60%时,http请求有时会完成。
但我想将gaugefield值与http请求/响应同步。这意味着弹出屏幕将始终以100%删除。
答案 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 ...
}
}
我在这里遗漏了很多胆量,但我希望这会让你朝着正确的方向前进。