안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요 파싱관련해서 공부하고 있는 학생입니다.
다음과 같은 소스를 잤는데..파싱이 오래걸려 Thread를 이용했습니다.
근대 파싱하는동안 ProgressDialog가 잘돌다가 파싱이 끝난후에 ProgressDialog 가 멈추고
화면에 가져온 자료를 뿌려야 되는데 화면에 아무것도 나타나지 않습니다.
쓰레드 없이 했을때는 이상없이 되는거보니 파싱이 잘못되고 그런건 아닌것 같습니다.
틀린부분 있으면 지적좀 부탁드리겠습니다.
public class 000000 extends Activity {
private ProgressDialog m_ProgressDialog = null;
TextView line;
Parser Route;
String htmlContent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.eatmain);
Thread thread = new Thread(null, doBackgroundThreadProcessing, "MagentoBackground");
thread.start();
m_ProgressDialog = ProgressDialog.show(000000.this,
"Please wait...", "Retrieving data ...", true); //progressDialog를 실행
}
private Runnable doBackgroundThreadProcessing = new Runnable()
{
public void run()
{
getString(); //파싱 해오는 작업
m_ProgressDialog.dismiss(); //프로그래스다이어로그 중단.
}
};
private void getString(){
Log.d("Thread Start", "Thread Start~!");
try
{
line = (TextView)findViewById(R.id.line);
Route = new Parser();
String sourceUrlString = "url주소";
htmlContent = Route.getHtmlToText(sourceUrlString); //파싱하기
if(Route.setParsing(htmlContent)) {
line.setText(Route.getmain1()); //출력하기.
}
}catch (Exception ex)
{
ex.toString();
}
}
}
위의 코드에서는 스레드 안에서 UI인 m_ProgressDialog.dismiss() 를 호출한것이 문제 입니다.
이런 작업을 하기 위해서는 몇가지 방법이 있는데, 저는 스레드를 안쓰고 ActiveTask 를 사용합니다.
아래 글 읽어보시면 도움이 되실겁니다. :)
http://android-developers.blogspot.com/2009/05/painless-threading.html