국내에는 루비 온 레일즈 개발자가 많이 없(는 것으로 알고 있)고,

루비 온 레일즈를 적극 사용하는 회사는 스타트업 몇몇 회사 밖에 안되는 것으로 알고 있다.


그러나,

미국의 실리콘밸리를 중심으로 한 전세계 스타트업들은

생각보다 루비 온 레일즈를 훨씬 많이 사용하고 있다.

(최근에는 좀 떨어지고 있는 것으로 알고 있다.)


아래는 2011년 12월의 자료로서,(2년 전 자료.)

전 세계 주요 500명의 소프트웨어 개발자(particularly those at startups and small tech-driven businesess)

분석한 통계자료이다.

프레임워크 분야에서 루비 온 레일즈가 약 30%을 차지하고 있는 것을 알 수 있으며,

다른 프레임워크에 비해 월등히 앞서고 있는 것을 알 수 있다.


(출처 : http://blog.bestvendor.com/2011/12/developer-tools-infographic/)



그렇다면, 루비 온 레일즈를 이렇게 많이 사용하는 이유는 무엇일까?

다음은 필자가 루비 온 레일즈로 개발을 하면서 느꼈었던 장점들이다.


- MVC 모델이 거의 완벽히 구현되어 있다.

추가적인 작업이 없이, 폴더 내에 파일명만 맞추면 거의 완벽하게 MVC 모델이 구현이 된다.

그러므로 구조화 하는 작업들이 최소화 된다.

레일즈 자체가 완전히 MVC 모델에 맞추어 만든 프레임워크라 그런 것 같다.


-외부 라이브러리를 추가하는 것이 매우 간단하다.

외부 라이브러리(Ruby에서는 Gem이라 부른다)를 가지고 오기 위해서,

특정 파일(Gemfile)에 라이브러리명과 버전만 명시를 해주고,

인스톨하면 끝이다.

자바 등에 비해 라이브러리가 적다는 이야기가 있지만,

웹 서비스 개발에 관련된 라이브러리는 충분히 제공되고 있는 듯 하다!


- 이 외에도 귀찮은 작업을 최소화해준다.

라우트를 지정해주거나, M-V-C를 연결하거나, 

데이터베이스를 생성하거나 하는 등의 작업들을

최소화 해준다.

(심지어 SQL문을 알 필요도 없이, 데이터베이스를 객체 형태로 제공해준다)


-Script언어인 Ruby언어를 사용함

비교적 배우기 쉬운 언어인 Ruby를 사용하여, 개발을 배우는 데 부담이 적고, 쉽게 개발할 수 있다.

자료형 선언부터 시작해서, 많은 부분들을 Ruby가 처리해주므로,

자바나 씨 등 타 언어에 비해서 쉽고, 빠르게 개발할 수 있다.


- 결론은, 개발 속도가 매우 빠르다는 것이다.

앞서 언급한 몇가지 이유로, 루비 온 레일즈를 이용하여 매우 빠른 웹서비스 개발이 가능하다.

일례로 친구들과 100시간 만에 온라인 서비스 런칭하는 내기를 했는데,

100시간이면 디플로이까지 가능한 시간이었다.

(서버 삭제 빵을 했었다...)

또한 최근에 만든 웹 서비스는 약 6시간 만에 개발을 완료하기도 하였다.

물론 개발 Size에 따라 다르겠지만, 확실히 타 프레임워크에 비해서

웹 서비스를 만드는데 최적화 되어있다는 느낌이 든다.



린 스타트업 방식을 따르는 스타트업은 빠른 프로토타이핑, 작은 프로덕트를 자주 출시해서,
소비자들의 반응을 보면서 빠르게 움직이는 것이 생명이다.

스타트업을 준비하고 있다면, 빠른 웹서비스 개발을 가능하게 해주는 
루비 온 레일즈를 배워보는 것도 좋을 것 같다.

개발자여, 런칭행 급행열차를 타라~

----

프로그래밍 교육에 대해 검색하다보니
현재 코드라이언(codelion.net)이라는 곳에서 루비 온 레일즈 강의 접수를 받고 있다고 한다.
관심 있는 사람은 신청해보는 것도 좋을 듯 하다.






'루비 온 레일즈' 카테고리의 다른 글

루비 온 레일즈의 장점  (3) 2014.01.03
Posted by 90002
유용한 사이트 모음 " 2013.VER "


토렌트 다운로드계의 구글
http://bitsnoop.com/
... 여기에 없는 토렌트파일은 태양계밖에 있다고 하는
토렌트 다운로드계의 구글 비트스눕
외국사이트이기 때문에 자막이 없는 경우도 있어
그 경우 따로 구해야함

사업/재테크를 통해 수익을 올리는 방법을 배우는 공간
http://cafe.naver.com/trendhunting
플랫폼 비즈니스, 클라우드 컴퓨팅등 미래의 비즈니스
트렌드를 공부하는 공간.
온라인 마케팅과 재테크, 사업 분야 등에 있어 실제적인
정보를 바탕으로 수익화 시키는 방법을 공부하는 공간입니다

http://dasibogi.com/
예능,다큐,드라마 다 볼수 있는곳 (유학생들이 애용하는 곳)


고화질 HDTV를 인터넷에서 무료로 보자!
http://thisr.com/
집에 TV가 없는 분들에게 추천 하는 사이트 .
회원가입 필요 없이 무료로 볼수 있습니다.
KBS,SBS,MBC등 지상파는 물론 스포츠,EBS,게임,라디오 까지
볼 수 있습니다. 뽐뿌분이 운영하고 있다고 합니다.

무료 음악 스트리밍 사이트
http://grooveshark.com/
말이필요없는 음악 스트리밍 사이트계의 최고봉.
로그인 하지 않아도 무제한으로 음악을 들을 수 있는 사이트입니다.
한국노래는 물론 해외의 많은 노래들도 무료로 들을 수 있습니다. 심지어 스마트폰에서도 가능 단 다운로드는 유료

고화질 배경화면사이트
http://wallbase.cc/home
해상도, 화면비율 별로 배경화면 선택 할 수 있는 사이트
예쁜사진이 많고 최신사진도 많은 사이트.


그림 못그리는 사람도 화가로 만들어 주는 사이트
http://www.zefrank.com/scribbler/scribblertoo/
아무리 그림을 못그리는 사람이라도 있어!
보이는 그림으로 만들어 주는 사이트 입니다.
심심할때 아무거나 그려보기 좋아요.

툰툰툰
http://glas.kr/app/toon/viewToonList?size=10&page=3
다양한 웹툰들을 한자리에서 구독할 수 있는 사이트(링크 형식)
회원가입을 하면 원하는 웹툰만 볼 수 있습니다.

공연,전시 관람료 지원해주는 <사랑티켓>
http://www.sati.or.kr/
공연의 경우 7000원, 전시의 경우 5000원의
관람료를 지원 받을 수 있는 사이트.
연간 총 10장의 사랑티켓이 부여

yoUeFO (유에포)
http://www.youefo.com/film
독립영화를 모아 온라인에서 상영해주는 사이트
<똥파리>양익준 감독, <추격자,황해>,
나홍진 감독들의 단편영화를 볼 수 있습니다.

<올스타> 공모전
http://www.allstarcontest.co.kr/
각종 분야의 공모전 소식들이 있는 사이트.
가장 많은 공모전 정보가 있다해도 무방한 곳.

디자인 관련 사이트
http://www.dafont.com/ 영문폰트 다운
http://www.ohlalamag.com/ 2D그래픽, 사진해외사이트
http://ffffound.com/ 분야에 관계없는 디자인 순수예술



패션 관련 사이트

사토리얼리스트
(페북에서 유알엘치면 안된다고 나옴.. 대충은 다들 아실듯)
http://www.polyvore.com/ 코디 정보
http://www.streetpeeper.com/ 스트리트 패션
http://coolspotters.com/ 스타가 입은 상품 정보 공유 사이트
http://jakandjil.com/blog/ 스트리트 패션 블로그
http://lookbook.nu/ 룩북
http://forums.thefashionspot.com/f50/celebs-caught-wearing-same-outfit-80923.html 연예인 같은 옷 비교
http://blog.naver.com/gustosignore 남자 클래식 수트관련 블로그
http://fashion-mk.com/ 유럽스타일 패션자료인테리어, 건축
http://cafe.naver.com/digitalfactory 3D모델링 모음 사이트,
3D모델링창고(인체 조경모형, 가구 모델링 등등)
http://cafe.naver.com/remonterrace.cafe 레몬테라스 카페
http://www.dailyicon.net/ 해외 건축 및 인테리어, 가구, 소품
http://unhappyhipsters.com/ 실내외 인테리어
http://www.archdaily.com/ 건축물
http://freshome.com/ 실내외 인테리어 및 아이템
http://prettyspace.tumblr.com/ 이쁜 인테리어


수능공부 사이트
http://www.1ta.co.kr/ 인강 선생님들 순위 알려줌
http://www.studycode.net/ 공부법을 알려주는 사이트
http://www.bapul.net/ 수학문제 질문하면 답변해주는곳


영어공부 사이트

영어 - 청취
http://read2me.net/ 내가 쓴 문장을 읽어주는 사이트
hhttp://www.dailyenglish.com/ 무료 청취학습 있음

영어 - 리딩
http://www.readingtc.com/reading/test.html
리딩능력 측정 사이트
http://www.twiztv.com/s/ 영화대본사이트
http://thestar.com.my/english/
칼럼, 영어 사용 시 자주 헷갈리는 것, 틀리는 것에 대해
http://comics.com/ 외국 카툰
http://www.newsenglishlessons.com/
영어뉴스(리스닝, 롸이팅액티비티 有)

영어 - 기타
http://www.wordbreak.net/ 깜박이 영어같은 단어암기 사이트
http://babel.altavista.com/translate.dyn 번역 사이트
http://kr.babelfish.yahoo.com/translate_txt 번역 사이트
http://www.gohackers.com/html/eng_edu/eng_edu.htm?idx=12
해커스 영어 학습 사이트
http://www.urbandictionary.com/ 영어 슬랭 사전
http://www.eoneo.com/lang/en/freezone/grammarChecker/
영어 문법 검사
http://translate.google.com/ 구글 번역 사이트
http://www.sharedtalk.com/ 외국인 친구 사귀는 곳
http://www.keybr.com/welcome 영타연습, 속도측정
http://www.merriam-webster.com/ 영영 사전
http://www.elllo.org/ 혼자 영어공부하기 좋은 사이트
http://lingual.net/ 영화로 영어공부
http://www.breakingnewsenglish.com/
브레이킹뉴스잉글리쉬, 뉴스, 스크립트, 연습문제등
http://englishcube.net/ 영어공부 할 수 있는 온갖 사이트 망라
http://www.interpals.net/ 외국인 펜팔사이트
http://www.bbc.co.uk/worldservice/learningenglish/
비비씨 러닝 잉글리시






★ 반응이 좋아!! 유용한 앱들도 추가!!

에버노트 - 메모장 쓴걸 pc끼리,pc 헨드폰 동기화 되는 앱
안드: http://bit.ly/XPHqMn
아이폰 : http://bit.ly/UNQuQX

A-Card - 명함을 사진으로 찍어서 관리할수 있는 앱
아이폰: http://bit.ly/XPIK1G

애즐 - 모바일게임 다운 받으면 돈주는 앱
안드: http://bit.ly/XlWfCg
아이폰: http://bit.ly/VU77oY

My Data Mgr -
자신의 헨드폰 데이터사용량 관리할수 있는앱
안드: http://bit.ly/XPL0WN
아이폰: http://bit.ly/VjChd0

벤치비 - 스마트폰 인터넷 속도측정할수 있는 앱
안드: http://bit.ly/UXPIy4
아이폰: http://bit.ly/VMfZjy

Jorte - 일정 관리해주는 앱중 가장 쓸만함
안드: http://bit.ly/UNU2Tq
아이폰: http://bit.ly/VU8EeS

어제오늘 - 어제와 비교한 오늘의 날씨를 보여주는 앱
안드: http://bit.ly/VJETOM


김급식(장급식) -
자신의 고등학교(중학교) 급식 메뉴보여주는 앱
안드: http://bit.ly/UC3pAj
아이폰: http://bit.ly/TMcCIU

sleep if you can : 사진을 지정해두고 그사진이랑
똑같은 사진을 찍어야 알람이 꺼지는 앱
안드: http://bit.ly/VU8UdM

그루노트 : 공연장에서 전광판처럼 사용할수 있는 앱
아이폰: http://bit.ly/RHf4kb



url 따기 힘들어서......그외 어플은 그냥...


비트윈 ( 커플끼리 둘만의 카톡, 사진저장,d-day등등 )
그닥,, 추천하고 싶진 않지만
커플각서(구속하는 연인들을 위한.. ), 카톡몰래보기 (카톡을 읽으면 없어지는 1을 그대로 두고 카톡내용 확인가능). 나눔로또(자신의 로또번호를 qr코드로 찍어 당첨여부를 바로 확인가능). 배달의민족(다 알듯, 배달어플중 1위)





출처: 오늘의유머 laboum23★님 글에서 추가,편집함
Posted by 90002

 

영상을 잘못 찍으면 영상 회전 혹은 반전을 해야할 때가 있다.

혹은 영화 자체가 옆으로 나온 경우도 있다.

그럴 땐 어떻게 해야할까?

 

플레이어에서 간단한 설정만으로 바꿀 수 있다!!

 

1. 곰플레이어

곰플레이어 쓰지 말자.

는 아니고,(왠만하면 바꾸자)

곰플레이어는 회전은 지원하지 않고, 상하 반전, 좌우 반전만 지원을 한다.

 

화면 위에서 오른쪽 마우스 누르고,

[영상]으로 가면 제일 위에 [입력 상하 반전],[출력 상하 반전], [입력 좌우 반전], [출력 좌우 반전]이 있는데,

상하 반전 하려면

[입력 상하 반전],[출력 상하 반전] 중에 하나 누르면 되고

좌우 반전 하려면

[입력 좌우 반전], [출력 좌우 반전] 중에 하나 누르면 된다!

 

 


2. 다음팟 플레이어

다음팟 플레이어는 회전과 반전을 모두 지원한다.

우선 반전은

화면 위에서 [영상]-[영상 처리]로 가면 [상하 반전]과 [좌우 반전]이 있다.

곰플레이어처럼 입출력이 나눠져 있는 것이 아니기 때문에,

그냥 원하는 것을 클릭하면 된다!

 

회전은 [영상]-[영상 회전]으로 들어가면

90도, 180도, 270도 조정을 할 수 있다.

혹은 그냥 ctrl+k를 계속 누르면 순서대로 회전을 한다!

 

결론은 역시 곰플레이어보다는 다음팟 플레이어가 낫다.

기능도 더 많고,

업데이트할 때, 체크 제대로 못하면 다음이 첫페이지가 되는 것이 짜증나지만,

GOM이 첫페이지 되는 것 보다야 낫지 않은가?!ㅋㅋ

 

 

Posted by 90002

 

곰플레이로 영상 재생을 하다 보면,

엄청 끊기거나, 속도가 느려서 화면이 깨지고, 보기 힘들 때가 있다.

(특히 토렌트 파일 다운 받으면서 넘기면서 보려고 하면 

너무 끊겨서 정신 없다.)

 

혹은 제대로 된 파일인 것 같은데,

용량이 조금 큰 파일(블루레이 파일 같은 것)은

그냥 재생이 잘 안된다.

뿐만 아니라, 곰플레이를 끄려고 할 때 갑자기

응답없음이 뜨기도 한다.

 

해결 방법은 무엇일까?

간단하다! 동영상 플레이어를 바꾸면 된다!!

 

그 중 필자가 추천하는 것은

다음팟 플레이어!(클릭)

 

다음팟 플레이어와 곰플레이어를

단순 메모리 사용량으로만 비교하면 비슷한데,

다음팟 플레이어가 곰플레이어보다 잔버그가 없고,

고용량 영상 재생도 잘되며,

다양한 기능이 있다(예를 들면 회전기능!)

 

곰플레이어의 장점은 자막 검색기능이 있다는 것?!

 

곰플레이어, wmplayer로 고생하고 있다면,

귀찮아 하지 말고, 갈아타자 다음팟 플레이어!

Posted by 90002

 

인터넷이 잘 되다가 안되어서

인터넷 문제 해결을 눌러보니

 

'장치 또는 리소스(dns서버)와 통신할 수 없습니다.'라고 뜬다.

로컬 영역 연결 상태에서 '받음'과 '보냄'도 충분히 많이 있다.

 

 

이래저래 해봐도 안되길래

부팅을 하면서 F8을 계속 눌러서 안전모드(네트워크 사용)로 들어간 뒤,

인터넷을 확인해보니 잘 된다.

 

다시 재부팅!

하면 문제 해결.

 

※안전모드에서 인터넷이 되다가

정상 부팅 하면 인터넷이 안되면

추가로 설치한 프로그램들을 지워보거나,

다시 안전모드로 들어가서 복원을 하면 된다.

 

 

Posted by 90002
이삿짐
이사할 때 이사 갈 집으로 옮기는 짐.

이삿짐이 맞는 표준어네요!
Posted by 90002

안드로이드 휴대폰 상에 실제 mm 계산하기(dpi를 mm으로 바꾸기)

 

블로그 초기에 안드로이드에서 쓰이는 길이 단위에 대해서 알아보았습니다.

안드로이드에서 쓰이는 길이 단위(dp,sp,pt,px,mm,in)

 

제가 길이 단위에 대해서 알아본 것은

결과적으로 휴대폰의 클릭하는 지점의 좌표를 mm로 알아내려고 한 것이었습니다.

 

방법은 간단합니다.

 

휴대폰에서는 모든 좌표를 px단위로 받습니다.

그리고 dpi=px/inch이므로,

mm=px*25.4/dpi로 변환이 가능합니다.

 

그러므로, 좌표를 px단위로 입력 받은 뒤에, mm로 변환하면 됩니다.

 

        DisplayMetrics outMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
        
        xdpi=outMetrics.xdpi;//x방향 dpi
        ydpi=outMetrics.ydpi;//y방향 dpi

 

로 각 방향의 dpi를 받은 뒤,

mm=px*25.4/dpi

식에 대입하여 전환하면 오케이!!

Posted by 90002

다이얼로그 새로 고침. 매번 같은 내용 나올 때

 

커스텀 다이얼로그를 사용하다보면,

안의 내용을 바꿔도 다이얼로그가 변하지 않는 경우가 있습니다.

방법은 간단합니다.

 

 @Override
   protected void onPrepareDialog(int id, Dialog dialog, Bundle args){
    super.onPrepareDialog(id, dialog,args);
     //다이얼로그 불릴때마다 초기화
    removeDialog(id);

  }

 

를 하면 됩니다. 여기서 id는 showDialog(id)에 넣었던 id를 넣으면 됩니다^^

Posted by 90002

커스텀 다이얼로그를 하면 버튼을 눌러도 닫기가 되지 않습니다.

이것을 해결하기 위한 방법으로는 세가지가 있습니다.

 

1. 커스텀 다이얼로그를 Class로 만들어서 사용하기

 

첫번째 방법으로는 커스텀 다이얼로그를 아예 따로 Class를 만들어서 사용하는 방법입니다.

 

//CustomizeDialog.java-텍스트뷰와 Close 버튼만 있습니다.

public class CustomizeDialog extends Dialog implements OnClickListener {
Button close;
TextView tv;
public CustomizeDialog(Context context,String Stringcontent) {
   
super(context);
    requestWindowFeature
(Window.FEATURE_NO_TITLE);     
    setContentView
(R.layout.custom_diolog_main);
    tv
=(TextView) findViewById(R.id.content);
    tv
.setText(Stringcontent);
    close
= (Button) findViewById(R.id.close);
    close
.setOnClickListener(this);
}

@Override
public void onClick(View v) {      
   
if (v == close)
        dismiss
();
}
}

 

부를 때는 다음과 같이 하면 됩니다.

CustomizeDialog customizeDialog = new CustomizeDialog(CustomDialog.this,"clickme");
customizeDialog.show();
출처 :http://stackoverflow.com/questions/8736508/android-close-custom-dialog-within-layout
2. Dialog 클래스를 선언해서 사용하기
개인적으로는 훨씬 쉬운 방법이라고 생각합니다!
AlertDialog.Builder CustomizeDialog = new AlertDialog.Builder(CompareSizeCore.this)
.setView(CustomizeView)
.create();
등과 같이 커스텀 다이얼로그를 선언(?), 변수화?음... 어쨋든 위와 같이 하고,
닫고 싶은 위치에서는
 CustomizeDialog.dismiss(); 
하면 닫을 수 있습니다!!
 
3. dissmissDialog(id) 사용하기
id에는 showDialog(id)에 적었던 id를 적으면 됩니다.
Posted by 90002
인텐트를 다루는 두 번째 시간이 돌아왔습니다. (와우!)
이번 강좌는 저도 인텐트를 쪼~까 공부하느라 뭔가 깔끔하지 못할 지도 모르겠네요(...)
그래도 최대한 자세하게 다뤄보도록 할테니! 걱정은 마시고!! 따라오시면 될겁니다. (아마도요...펑...)

지난 시간에는 다른 액티비티를 단순히 "호출"하는 것만 배웠습니다. 그런데, 실제 어플리케이션을 개발하다보면 액티비티를 호출하는 것은 어찌보면 당연한 것이고, 액티비티간에 데이터를 주고받아야 할 일이 생깁니다. 그럴 땐 어떻게 해야 할까요? => 바로, 이 때도 인텐트를 사용하면 됩니다(...)

인텐트는, 액티비티를 호출하는 수단 뿐 아니라 인텐트 자체에 액티비티간 주고받아야 할 정보들을 실어줄 수 있습니다. 예를 들자면 심부름꾼(???) 이라고 할까나요??

A라는 사람이 B에게 물건을 가져오라고 심부름꾼에게 시키면, 심부름꾼은 B에게 가서 물건을 받아 A에게 전달해주게 됩니다. 마찬가지로, 액티비티 A가 B로부터 어떠한 정보를 받고 싶다면, 인텐트를 사용하여 B를 호출한 다음, 인텐트에 원하는 정보를 실어서 그 정보를 다시 돌려받으면 됩니다.

일단, 호출하는 액티비티 (InformationInput)호출당하는 액티비티(InformationProc)의 코드를 보도록 하겠습니다.


(주의)
액티비티를 추가하는 방법을 모르신다면, 2009/03/01 - [안드로이드/안드로이드 입문] - [강좌] [수정] 이클립스에서 안드로이드 액티비티 추가하기 를 읽고 액티비티 추가 방법에 대해 숙지하신 후 이 강좌를 읽어주세요.


[InformationInput.java]

01.package com.androidhuman.IntentTest;
02.import android.app.Activity;
03.import android.content.Intent;
04.import android.os.Bundle;
05.import android.view.View;
06.import android.widget.Button;
07.import android.widget.TextView;
08.
09.public class InformationInput extends Activity {
10. /** Called when the activity is first created. */
11. @Override public void onCreate(Bundle savedInstanceState) {
12. super.onCreate(savedInstanceState);
13. setContentView(R.layout.main);
14. final Button requestInfo = (Button)findViewById(R.id.requestInfo);
15. requestInfo.setOnClickListener(new Button.OnClickListener(){ // 버튼을 클릭할 경우
16. public void onClick(View v){
17. Intent intent = new Intent(InformationInput.this,InformationProc.class);
18. startActivityForResult(intent, 1); // Sub_Activity 호출
19. }
20. });
21. }
22.
23. @Override
24. protected void onActivityResult(int requestCode, int resultCode, Intent data){
25. super.onActivityResult(requestCode, resultCode, data);
26. TextView name_view = (TextView)findViewById(R.id.name_view);
27. TextView digit_view = (TextView)findViewById(R.id.digit_view);
28. if(resultCode==RESULT_OK) // 액티비티가 정상적으로 종료되었을 경우
29. {
30. if(requestCode==1) // InformationInput에서 호출한 경우에만 처리합니다.
31. { // 받아온 이름과 전화번호를 InformationInput 액티비티에 표시합니다.
32. name_view.setText(data.getStringExtra("data_name"));
33. digit_view.setText(data.getStringExtra("data_digit"));
34. }
35. }
36. }
37. }


[main.xml]
01.<?xml version="1.0" encoding="utf-8"?>
02.<LinearLayout
03.android:layout_height="fill_parent"
04.android:layout_width="fill_parent"
05.android:orientation="vertical"
07.<TextView android:layout_height="wrap_content"
08.android:layout_width="fill_parent"
09.android:text="@string/name" />
10.<TextView android:layout_height="wrap_content"
11. android:layout_width="fill_parent"
12. android:text="-이름이 입력되지 않음-"
13. android:id="@+id/name_view"/>
14.
15.<TextView android:layout_height="wrap_content"
16. android:layout_width="fill_parent"
17. android:text="@string/digit"/>
18.
19.<TextView android:layout_height="wrap_content"
20. android:layout_width="fill_parent"
21. android:text="-전화번호가 입력되지 않음-"
22. android:id="@+id/digit_view"/>
23.
24.<Button android:layout_height="wrap_content"
25. android:layout_width="wrap_content"
26. android:text="@string/button_launch"
27. android:id="@+id/requestInfo"
28. android:layout_gravity="center_horizontal"/>
29.</LinearLayout>



[InformationProc.java]

01.package com.androidhuman.IntentTest;
02.import android.app.Activity;
03.import android.content.Intent;
04.import android.os.Bundle;
05.import android.view.View;
06.import android.view.View.OnClickListener;
07.import android.widget.Button;
08.import android.widget.EditText;
09.public class InformationProc extends Activity {
10. /** Called when the activity is first created. */
11. @Override public void onCreate(Bundle savedInstanceState) {
12. super.onCreate(savedInstanceState);
13. setContentView(R.layout.informationproc);
14. Button input_info = (Button)findViewById(R.id.inputinfo);
15. input_info.setOnClickListener(new OnClickListener(){
16.
17. public void onClick(View v) { //버튼을 클릭하면
18. Intent intent = getIntent(); // 이 액티비티를 시작하게 한 인텐트를 호출
19. EditText name_input = (EditText)findViewById(R.id.name_input);
20. EditText digit_input = (EditText)findViewById(R.id.digit_input);
21. intent.putExtra("data_name",name_input.getText().toString());
22. intent.putExtra("data_digit", digit_input.getText().toString());
23. setResult(RESULT_OK,intent); // 추가 정보를 넣은 후 다시 인텐트를 반환합니다.
24. finish(); // 액티비티 종료
25. }
26. });
27. }



[informationproc.xml]




01.<?xml version="1.0" encoding="UTF-8"?>
02.<LinearLayout
03. android:layout_height="wrap_content"
04. android:layout_width="fill_parent"
05. android:orientation="vertical"
07. android:id="@+id/overview_layout">
08.
09.<TextView android:layout_height="wrap_content"
10. android:layout_width="wrap_content"
11. android:text="@string/text_information"/>
12.
13.<LinearLayout android:layout_height="wrap_content"
14. android:layout_width="fill_parent"
15. android:orientation="horizontal"
16. android:id="@+id/name_layout">
17.
18.<TextView android:layout_height="wrap_content"
19. android:layout_width="wrap_content"
20. android:text="@string/name"/>
21.
22.<EditText android:layout_height="wrap_content"
23. android:layout_width="fill_parent"
24. android:id="@+id/name_input"
25. android:hint="ex)안드로이드"/>
26.</LinearLayout>
27.
28.<LinearLayout android:layout_height="wrap_content"
29. android:layout_width="fill_parent"
30. android:orientation="horizontal"
31. android:id="@+id/digit_layout">
32.
33.<TextView android:layout_height="wrap_content"
34. android:layout_width="wrap_content"
35. android:text="@string/digit"/>
36.
37.<EditText android:layout_height="wrap_content"
38. android:layout_width="fill_parent"
39. android:id="@+id/digit_input"
40. android:hint="ex)011-123-4567"/>
41.
42.</LinearLayout>
43.
44.<Button android:layout_height="wrap_content"
45. android:layout_width="wrap_content"
46. android:text="@string/input"
47. android:id="@+id/inputinfo"
48. android:layout_gravity="center_horizontal"/>
49.</LinearLayout>


단순히 액티비티를 호출할 때에는 startActivity(Intent)를 사용했었지만, 액티비티를 호출한 후 결과값을 받기 위해서는 다른 메소드를 사용해야 합니다. 바로 startActivityForResult(Intent intent, int requestCode)입니다.


public void startActivityForResult(Intent intent, int requestCode)
호출당하는 액티비티로부터 데이터를 넘겨받기 위해 사용합니다.
intent - 인텐트
requestCode - 이 액티비티를 호출하는 액티비티가 여러 개가 있을 경우, 어떤 액티비티가 호출했는지를 알기 위해 사용


requestCode는 별로 특이한 것은 아니고, 한 액티비티를 여러 액티비티가 호출해야 할 경우, 호출이 어디에서 일어났는지를 알려주는 인자값입니다.
일단, InformationInput 액티비티를 봅시다. 버튼을 클릭하면 InformationInput 액티비티가 InformationProc 액티비티를 호출해야 하므로, 일단 intent를 생성하고, startActivityForResult()를 통해 InformationProc 액티비티를 실행시킵니다.



InformationProc 액티비티가 실행되면, 사용자로부터 이름과 전화번호를 입력받게 됩니다.
입력이 끝나고, 입력 버튼을 누르면, 입력받은 데이터를 인텐트에 집어넣게 됩니다.
1.Intent intent = getIntent(); // 이 액티비티를 시작하게 한 인텐트를 호출
2. EditText name_input = (EditText)findViewById(R.id.name_input);
3. EditText digit_input = (EditText)findViewById(R.id.digit_input);
4. intent.putExtra("data_name",name_input.getText().toString());
5. intent.putExtra("data_digit", digit_input.getText().toString());
6. setResult(RESULT_OK,intent); // 추가 정보를 넣은 후 다시 인텐트를 반환합니다.
7.finish(); // 액티비티 종료

차근차근 하나씩 보도록 하겠습니다.
일단, 첫번째, 인텐트를 생성하는 것을 볼 수 있습니다. 보통, 인텐트를 생성할 때 new 생성자를 써서 인텐트를 생성했던 것에 반해, 여기에서는 getIntent()를 사용하여 인텐트를 불러오고 있습니다. getIntent()메소드는 현재 자신을 호출했던 인텐트를 반환해줍니다.

여기서, 자신을 호출한 인텐트를 받아오는 것은, 아까 예로 들었던 심부를꾼을 생각해보면 쉽게 이해할 수 있습니다. A라는 심부름꾼에게서 물건을 받았는데, B라는 심부름꾼에게 물건을 주면 안되겠죠? 인텐트도 마찬가지입니다. :)

이렇게 해서 인텐트를 생성하면, 이제 EditText로부터 입력한 값들을 받아와야 합니다. findViewById()를 이용하여 레이아웃 객체와 코드상의 객체를 연결한 후, putExtra()메소드를 이용해 정보를 실어줍니다.

intent.putExtra(String name, _value)
name이라는 이름을 가지는 데이터를 인텐트에 첨가합니다.

인텐트에 들어가는 데이터는 "키"의 역할을 하는 name과 그에 해당하는 값인 _value가 짝을 이루어 저장됩니다.
이렇게 저장이 되었다면, 호출된 액티비티가 정상적으로 끝났는지, 비정상적으로 끝났는지 (물건을 제데로 받았는지, 심부름꾼이 왔는지 등등...으로 비유할 수 있겠습니다) 자신을 호출한 액티비티에게 알려주기도 해야 하고, 요청한 데이터도 같이 주어야 합니다.

일단, 호출당한 액티비티가 정상적으로 끝났음을 알리기 위해, setResult(RESULT_OK, intent) 메소드를 사용합니다. RESULT_OK로 액티비티가 정상적으로 끝났음을 전달하게 됩니다. RESULT_OK를 반환하지 않고 중간에 비정상적으로 종료되었다면 저 코드를 반환받지 못하므로 뭔가 문제가 있구나 알게 되겠죠? 제데로 종료가 된다면, 아까 우리가 추가로 입력한 데이터를 담은 인텐트도 함께 반환하게 됩니다.

이렇게.. 여기까지 정상적으로 돌아간 후, 호출당한 액티비티(InformationProc)가 finish()메소드에 의해 종료되게 되면, OnActivityResult() 메소드가 호출되게 됩니다. 결과를 기다리고 액티비티를 호출했으니, 액티비티가 종료되었으니 그 결과를 확인해야겠죠??


void onActivityResult(int requestCode, int resultCode, Intent data)
startActivityForResult로 호출한 액티비티가 종료되었을 때 호출됩니다.



01.protected void onActivityResult(int requestCode, int resultCode, Intent data)
02.{ super.onActivityResult(requestCode, resultCode, data);
03. TextView name_view = (TextView)findViewById(R.id.name_view);
04. TextView digit_view = (TextView)findViewById(R.id.digit_view);
05. if(resultCode==RESULT_OK) // 액티비티가 정상적으로 종료되었을 경우
06. {
07. if(requestCode==1) // InformationInput에서 호출한 경우에만 처리합니다.
08. {
09. // 받아온 이름과 전화번호를 InformationInput 액티비티에 표시합니다.
10. name_view.setText(data.getStringExtra("data_name"));
11. digit_view.setText(data.getStringExtra("data_digit"));
12. }
13. }
14. }


위의 onActivityResult에서, requestCode가 아까 setResult()에서 액티비티가 정상 종료되었는지를 판단하는 인자값, RESULT_OK를 받게 됩니다. 그래서, 이걸 가지고 적절히 예외 처리를 해 줄 수 있는 거죠.
requestCode는 아까 startActivityForResult()를 호출할 때, InformationInput이 호출한 것임을 표시하기 위해 '1'으로 설정하였으므로, 여기에서 또한 그 코드를 맞춰주어야 제데로 결과값을 받을 수 있습니다.

즉, 정상적으로 액티비티가 종료되었다면 requestCode의 값은 RESULT_OK, resultCode는 1이 됩니다.

이렇게 해서, 모두 정상이라면 인텐트에서 받아온 데이터를 꺼내 화면에 표시합니다.

putExtra() 메소드가 어떤 타입이든 상관없었던 것에 비해, 불러올 때에는 getStringExtra()메소드를 사용하여 문자열 값을 불러오면 됩니다. getStringExtra()뿐 아니라 getIntExtra(), getBooleanExtra() 등 여러 가지가 있으므로 상황에 맞추어 사용하면 됩니다.

이렇게 해서, 화면에 표시되는 TextView의 텍스트 값들이 아까 호출한 액티비티의 값들로 바뀌게 됩니다. :)


이렇게 해서, 인텐트를 통해 액티비티간에 데이터를 주고받는 것에 대해서 알아보았습니다. 이번 강좌는 다른 강좌들과는 다르게 세세한 부분에 대한 설명은 대부분 생략하였습니다. 이 강좌쯤을 보시는 분들은 어느 정도 기초가 되어 있으리라 믿기에, 일부러 안 적었습니다. 게다가 그걸 다 적으면 강좌가 한도끝도 없이 길어지기만 하죠 -_-

현재, 이 코드는 모든 문자열 값을 strings.xml에 넣어서 그 쪽에 있는 값들을 참조하는 형식으로 구성되어있습니다. 이 부분에 대해 궁금하신 분은 제가 2009/03/14 - [안드로이드/안드로이드 입문] - [강좌] 외부 리소스 사용하기 (문자열) 에 정리해놓았으니, 이걸 보시면 되겠습니다. :)

 

 

출처:http://androidhuman.tistory.com/125

Posted by 90002
이전버튼 1 2 3 4 이전버튼

블로그 이미지
90002

공지사항

Yesterday2
Today5
Total125,405

최근에 달린 댓글

최근에 받은 트랙백

글 보관함