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

안녕하세요. AsyncTask와 ProgressBar 질문 좀 하겠습니다.

0 추천
package com.andro;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class BookmarkDetailActivity extends Activity implements OnClickListener {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.query_detail);

  // TODO Auto-generated method stub
  // 웹문서 소스 출력영역 인식
  TextView et_webpage_src = (TextView) findViewById(R.id.website_detail);
  // 정보를 추출할 인텐트의 생성
  Intent it = getIntent();

  // 인텐트로부터 send_name의 값을 추출함
  String str_name = it.getStringExtra("it_name");
  String name = "";

  URL url = null;
  HttpURLConnection urlConnection = null;
  BufferedInputStream buf = null;

  try {
   // DBManager 객체 생성(DB 존재 않으면 생성)
   DBManager dbmgr = new DBManager(BookmarkDetailActivity.this);
   // DB연결
   SQLiteDatabase sdb = dbmgr.getReadableDatabase();
   // SQL문 실행 결과를 cursor 객체로 받음
   Cursor cursor = sdb.rawQuery(
     "select waddress from websites where wid='" + str_name
       + "' ", null);

   // cursor객체로 할당된 테이블 데이터를 한 행씩 이동하면서
   if (cursor.moveToNext()) {
    String address = cursor.getString(0);
    url = new URL(address);
   }

   // /// URL 지정과 접속
   // 웹서버 URL 지정

   // URL 접속
   urlConnection = (HttpURLConnection) url.openConnection();

   // /// 웹문서 소스를 버퍼에 저장
   // 데이터 다운로드
   buf = new BufferedInputStream(urlConnection.getInputStream());
   // 데이터를 버퍼에 기록
   BufferedReader bufreader = new BufferedReader(
     new InputStreamReader(buf, "euc-kr"));

   String line = null;
   String page = "";

   // 버퍼의 웹문서 소스를 줄 단위로 읽어(line), page에 저장함
   while ((line = bufreader.readLine()) != null) {
    page += line;
   }

   // 웹문서 소스의 출력
   et_webpage_src.append(page);
   // cursor 객체 닫음
   cursor.close();
   // dbmgr 객체 닫음
   dbmgr.close();
  } catch (SQLiteException e) {
   // DB 접속 또는 조회 시 에러 발생 할 때 (생략)
  } catch (Exception e) {
   // 예외사항 출력
   et_webpage_src.append(e.getMessage());
  } finally {
   // URL 연결 해제
   urlConnection.disconnect();
  }

  // ID가 button_back인 버튼 초기화
  Button btn_back = (Button) findViewById(R.id.button_back);
  // 버튼 클릭 대기
  btn_back.setOnClickListener(this);
 }

 // 뒤로가기 버튼이 클릭 되었을 때
 public void onClick(View v) {
  Intent it = new Intent();
  // 현재 클래스에서 호출할 클래스 지정
  it = new Intent(this, TabViewActivity.class);
  // 인텐트에서 지정한 액티비티 실행
  startActivity(it);
  // 현재 액티비티 종료
  finish();
 }
}

 

 

안녕하세요. 안드로이드 생 초짜입니닷

위의 상태로 앱을 실행하면, Url에서 다운받는 속도때문에 앱이 잠시 멈추게 되어버려서

스래드를 사용하면 액티비티는 바로 바뀌고 웹사이트의 소스코드를 읽어오는동안

프로그래스바를 보여주면 된다고 그래서

어디서 주워들은건있어서 AsyncTask를 사용해서 해보려고 노력은 해봤는데,

이거저거 다 찾아봐도 AsyncTask에 대해 이해가 잘 되지가 않더라구요..

 

위의 소스를 AsyncTask를 사용해서 프로그래스바를 보여주는 방법이 없을까요?

꼭 AsyncTask가 아니라 다른 방법도 괜찮습니다.

androidJeon (200 포인트) 님이 2014년 6월 17일 질문
network 작업을 하는 code는 AsyncTask 또는 thread로 처리 하는게 맞습니다.
AsyncTask 사용법은 뭐 구글링 하시면 쉽게 찾을 수 있을 듯 하구요.
ProgressDialog를 보여주는건 AsyncTask 내부에서 처리하도록 하면될 듯 하네요.
onPreExecute() 에서 dialog를 show 하고, onPostExecute() 에서 dismiss 하면될듯 합니다.

1개의 답변

0 추천
 
채택된 답변
쭈쭈총각 (17,750 포인트) 님이 2014년 6월 17일 답변
androidJeon님이 2014년 6월 17일 채택됨
정말감사합니다. 덕분에 해결했어요
...