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

html파싱하는동안 프로그레스바 사용(Fragment 사용)

0 추천
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
        progressDialog = new ProgressDialog(getActivity());
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setMessage("로딩중");
        progressDialog.show();
        View view = inflater.inflate(R.layout.boxoffice,null);

뷰가생성되면 프로그레스바가 동작하게 설정했습니다.

그리고 스레드 부분
Runnable task = new Runnable() {

            @Override
            public void run() {
                getImgLink(url);
                getOpenday(url);
                getData(url);
                getOpenMovday(url);
                getPeoples(url);
                getMoney(url);
                getLink(url); -요부분은 제가 데이터 받아오는 부분(html 파싱)

                confirmHandler.sendEmptyMessage(1); // 핸들러에 메세지를 주기위해서

            }

        };

        thread = new Thread(task);
        thread.start();

        try {
            thread.join();

        } catch (Exception e) {

        }

여기서 핸들러로 신호를 줬습니다.
그리고 핸들러에서 받아와서

private Handler confirmHandler = new Handler(){
      @Override
      public void handleMessage(Message msg){
          if (msg.what==1){
              Toast.makeText(getActivity(), "첫번째 데이터를 받아왔습니다.", Toast.LENGTH_SHORT).show();
              progressDialog.dismiss();
          }
      }
    };

이렇게해서 프로그레스바를 없애고, toast로 데이터를 다 받아온걸 확인을 합니다.

그런데 이렇게 할 경우 제가 보니
당연히 오류는 안납니다
그치만 프로그레스바가 나오질 않습니다.
그이유를 알아보니
이 화면(즉 해당되는 Fragment ) 이 실행될때 html파싱을 먼저 다 한후에
화면을 표시해버립니다.....
즉 제가원하는건
데이터를 받아오는동안 프로그레스바를 실행시키는건데
여기서는 화면이 나오기전에 데이터를 받아와버리고
(그동안은 잠시멈춥니다.. 데이터받는시간)
다 받아오면 화면을 보여주니 프로그레스바가 보일 시간이 없는겁니다...ㅠㅠ

지금 탭이 4개로 구성되어 있는데
탭1에만 파싱을 해놨습니다.
탭4에서 탭1을 클릭해서 넘어갈때도
역시나 화면이 잠깐 멈추고 데이터를 다 파싱해온뒤에
해당화면으로 넘어갑니다...
이러니 프로그레스바가 보일지 않습니다....
(화면이 뜨는순간은 이미 데이터를 다 받아왔기 때문에 프로그레스바를 종료시켜버립니다.)

제가 원하는건 화면이 먼저뜨고난뒤 데이터를 받아오고 그시간동안 프로그레스바는 동작하고 데이터를 다 받아오면 프로그레스바를 종료하는겁니다...ㅠㅠ

설명이 길었는데 어떻게 안될까요?ㅠㅠ
힘드네요 ㅠㅠ

 

그리고 혹시나 화면이 먼저 나오고나서

스레드를 딜레이시켜서 하면 되지 않을까 싶어서

thread.sleep 도 해봤지만,

역시나 같은 증상 나타나고 그냥 화면나오는시간만 딜레이 됩니다...;

10초 딜레이시키면 데이터를 못받아오니 10초동안 딜레이됬다가 데이터받아와서

listview에 뿌려주면서 화면이 나타나더군요...ㅠㅠ

이게 도저히 불가능한건가요....;;;;;;ㅠㅠㅠㅠㅠ
익명사용자 님이 2015년 12월 17일 질문
2015년 12월 17일 수정

1개의 답변

0 추천
  1. progress 를 띄우고 나서 loadUrl 하면 되지 않아요?
  2. android 는 thread join 이 동작 안할 건데요 ?
aucd29 (218,390 포인트) 님이 2015년 12월 17일 답변
Runnable task = new Runnable() {

             @Override
             public void run() {
                 요기에 프로그레스바.show();
                 getImgLink(url);
                 밑은 동일하게해서 해도 전혀안됩니다.

무조건 앱이 화면을 넘길대 파싱을 쭉 다하고 나서
커스텀리스트뷰에 받아온값을 다 넣어주고
화면을 보여줍니다.
넘길때는 잠시 멈추고요
잠시 멈출때(데이터받아올때) progressbar를 나타나게 하고싶으나...
전혀안되네요...
...