마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

AsyncTask 프로그래스바로 상태 표시

0 추천

어싱크테스크에서 httpPost를 통해 파일을 다운받습니다.

 

총 크기는 400KB 정도 나오고

 

다운받은 크기를 체크해서

 

다운받는동안 현재 진행 정도를 표시해주려고합니다.

 

프로그래스바는 다이얼로그 안에 있고, 다운로드 버튼을 누르면 어싱크테스크가 동작하면서

 

커스텀 다이얼로그가 팝업되고, 다운로드를 진행합니다.

 

다이얼로그에 떠 있는 ProgressBar 를 down_progress로 선언 한 뒤

 

어싱크테스크 내에서 down_progress.setMax(크기) 로 주고

 

setProgress를 while문에 넣어 진행정도를 입력했는데

 

크기는 설정이 된것같습니다. setMax 후 바로 getMax 하면 400KB정도가 나옵니다.

 

그런데 setProgress가 안되는것같습니다. 그냥 저절로 계속 차는걸 반복합니다.

 

왜이런가요 ㅠ setProgress도 안먹히고 프로그레스는 자기혼자 계속 올라갔다가 초기화되고 다시 올라가고 합니다

 

0부터 max까지 진행하는데 약 4초가량이 걸리는것같습니다.

 

	public void downloadProgress() {
		LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
	    View view = inflater.inflate(R.layout.download_dialog, null);
	    tv_downState = (TextView) view.findViewById(R.id.tv_download_state);
	    appdown_progress = (ProgressBar) view.findViewById(R.id.web_download_progressbar);
		AlertDialog.Builder builder = new AlertDialog.Builder(mContext)
		.setView(view)
		.setNegativeButton("취소", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				
			}
		});
		
		downDialog = builder.create() ;
		downDialog.show() ;
	}

 

이렇게 넣고

 

buffer = new byte[(int)fileSize];
appdown_progress.setMax((int)fileSize);
 
while (true) {
int length = is.read(buffer, offset, 9048);
offset += length;
appdown_progress.setProgress(offset) ;
if (offset >= fileSize) break;
SystemClock.sleep(5L) ;
}

 

 

이렇게 사용하는데 잘 안되네요 .

음무 (17,820 포인트) 님이 2014년 4월 21일 질문

1개의 답변

+2 추천
 
채택된 답변
도움이 될진 모르겠습니다만...

왜 ProgressDialog를 사용하시지 않았는지 먼저 의문이네요.

그리고 버퍼를 fileSize로 하시는 것은 바람직하지 않아보이는데 특별한 이유가 있으신 것 같기도 하고...

while이 도는 횟수와 다르게 진행바가 한번에 올라가거나 초기화되는지 다시 확인해보세요~
Lifeclue (7,930 포인트) 님이 2014년 4월 22일 답변
음무님이 2014년 4월 22일 채택됨
ProgressDialog로 바꿨습니다 .. while이 반복되는만큼  잘 올라가는것같습니다 감사합니다.
...