2010-08-06 7 views
0

내 프로젝트에서 나는 http 요청에 대해 GaugeField와 함께 popupscreen을 사용하고 있습니다. 현재 우리는 고정 비율로 gaugefield의 값을 증가시키고 http 응답 후에 팝업 화면을 제거합니다. 게이지 필드가 40 % 또는 60 % 인 경우 일부 시간 http 요청이 완료됩니다.진행률 표시 줄 - HTTP 요청에 대한 진행률 표시 줄 - Blackberry

하지만 게이지 필드 값을 HTTP 요청/응답과 동기화하려고합니다. 그것은 팝업 화면이 항상 100 %로 제거된다는 것을 의미합니다.

답변

2

나는 내 앞에 코드가 없지만 몇 년 전 비슷한 프로젝트에서 뭔가가있다.

나는 그들이 읽은 바이트 수와 카운터를 증가 할 수 있도록 모든 read() 방법을 재 구현, 내가 openInputStream()에서 다시받은 InputStream 객체 감싸 InputStream의 서브 클래스를 썼다. 카운터가 특정 임계 값에 도달 할 때마다 서브 클래스의 생성자로 전달 된 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