Android 2011. 11. 1. 15:09
패키지명을 안다면 바로 삭제화면으로 갈 수 있습니다.

 

이렇게 사용하면 패키지명으로 해당앱 삭제 화면으로 갑니다. song.app 이 패키지 명입니다.

"package:  === "  이것이 틀이구요,  
posted by 젊은쎄오
:
Android 2011. 11. 1. 15:06
간단합니다. 


이렇게 하면 해당 텍스트 뷰에 패키지 명의 앱 이름을 뽑아 올 수 있습니다. 
posted by 젊은쎄오
:
JAVA 2011. 10. 17. 13:10
문자열이 일정한 패턴으로 길게 들어있다면 , split 이란 매소드로 끊어 담을 수 있습니다. 

저 같은 경우 , 이미지 패스 세개가 쭉 붙여서 한 String 배열로 담겨서 받은 적이있는데 

이 이미지를 받아 뿌리려면 각각 패스마다 잘라서 담아야했어서 split을 사용했습니다.

 

예제는 간단합니다, 위에 String name 변수에 " " 스페이스 공백을 사이에 둔 first , second, third 가 있습니다,

이렇게 일정한 패턴이라면 뽑아 낼 수 있는데요,

/* 각자 자르기 */ 를 보시면 값이 있는 name 변수에 .split(" ") 이렇게 붙이는데 이게 " "  이 공백으로

문자열을 나누겠다는 의미입니다. 만약 예제 문자열이  first=second=third  이런식이었다면 ("=") 이런식으로

사용하면 됩니다.

뒤에 []  는 배열의 의미인데 (" ") 이렇게 자르고 난 뒤 그림과 같이 왼쪽부터 0번,1번 ,2번 배열로 사용할 수 있습니다.



이렇게 하나 씩 잘라서 안쓰고 아예 배열에 넣고 싶다하시면 /* 잘라서 배열에 넣기 */  와 같이 

아예 String[] 배열 객체에 담을수도 있습니다, 사용방법은 위와 같이 [0] ,[1] 이런 배열 인덱스를 뽑아서

사용하구요 , 결과값은 이렇습니다



 

'JAVA' 카테고리의 다른 글

JAVA] Singleton 패턴  (0) 2013.02.07
JAVA] 현재 날짜, 시간 구하기  (1) 2011.11.30
JAVA] 22. 인터페이스 - 1  (0) 2011.08.19
JAVA] drawRect 속성 알아보기  (1) 2011.08.18
JAVA] String 원하는 만큼 잘라내기  (0) 2011.08.04
posted by 젊은쎄오
:
Android 2011. 9. 1. 20:38

안드로이드 인트로 화면을 만드는 방법입니다.

인트로를 만들려면 introActivity와 메인 화면 두 개만 있으면 됩니다.

전체적인 방식은 인트로 화면을 앱 구동시 첫 화면으로 셋팅하고 , 인트로 화면에 들어서면

핸들러를 이용하여 딜레이를 줍니다, 이 시간동안 인트로 화면이 떠있겠죠, 그리고

fade in , fade out 애니메이션을 줘서 자연스럽게 메인화면으로 넘어가는 방식입니다.

우선 앱구동시 첫 화면을 인트로 화면으로 하기 위해선 , 매니페스트로 가서

 
메인액티비티에 있던 인텐트 필터 부분을 인트로 액티비티 안으로 가져옵니다. 이 인텐트 필터는 

보시듯 처음 런칭될때 메인이 되는 액티비티를 선택해주는 부분입니다.

그리고 인트로 액티비티 구성을 


그림과 같이 작성합니다, 위에서 부터 보면 타이틀바를 없애고 핸들러를 호출합니다. 딜레이를 4000을 줘서 대략

4초간 인트로화면이 떠있게 만든 후 인텐트로 다음 메인화면을 지정하고 overridePendingTransition 이란 함수를

이용하여 fade in, fade out 효과를 줍니다. 순서가 중요합니다,  저 순서가 아니면 애니메이션이 안먹거나

오류가 납니다. 그리고 아래 오버라이드 된 부분은 인트로중에 뒤로가기를 눌러 바탕화면으로 간다면

4000밀리세컨 초 이후에 메인화면이 갑자기 뜨는 당황스러운 상황이 발생되기에 미연에 방지를 하기위하여

인트로 중에 뒤로가기를 누른다면 핸들러를 끊어버려 아무일 없게 만드는 부분입니다.  


posted by 젊은쎄오
:
Android 2011. 9. 1. 20:20

------------------------------------------------------------------------------------ 
현재 이 글은 v1 때 배포키 방법입니다. 구글은 앞으로 v1의 방법으로 새 키를 발급하지 않으며

v2 방식으로 구글 맵을 사용하셔야 합니다. 
------------------------------------------------------------------------------------


안드로이드에서 구글맵을 사용할 때엔 구글 맵 키가 필요합니다. 

키는 크게 두가지로 개발자가 개발할 때 쓰는 디버그 키와, 실질적으로 마켓에 올릴 때 쓰는

배포키가 있습니다. 디버그 키 상태로 마켓에 올리면 그것을 받아서 깐 사람들은 맵이

안뜨고 격자가 뜨게됩니다.

우선 키스토어 키를 만들어야 합니다. 이 키는 개발자 자신이 만든 앱이란 것을 알리고 

마켓에 업데이트 할 때 구분하는 용도로도 사용되니 잃어 버리시면안됩니다.

apk를 뽑을 때 이 키스토어 파일을 참조하여 뽑는 형식입니다.

우선 키스토어를 생성하는 방법입니다. 프로젝트를 우클릭 한 후 Export를 눌러줍니다

 
그 다음 Android > Export Android Application 을 선택 합니다




다음은 프로젝트 이름 확인입니다. next 눌러줍니다

 



Create new keystore 를 체크 하신 후 키스토어를 보관할 경로와 키스토어 이름을 써줍니다.
패스워드와 패스워드 확인을 하신다음 next 를 눌러줍니다




이제 키의 정보입니다. 맨 위 Alias도 배포키 만드는데 사용되기 때문에 기억 하셔야 합니다. 
편의를 위해 저는 키스토어 이름과 같게 하였습니다.
비밀번호와 유효년도 , 국적 정도만 적어주시고 next 눌러줍니다




마지막으로 apk가 빠질 경로를 정해주시면 됩니다.



 

 이렇게 하면 개인 키가 완성 됩니다.  

이제 구글맵 배포용 키를 만드는 방법입니다.

윈도우는 도스, 맥은 터미널을 켭니다 . 

우선 키가 있는 폴더 경로로 가야합니다. cd 명령어를 이용하여 키스토어가 있는 폴더로 이동합니다. 

맥은 pwd 명령어를 치시면 현재 경로를 알 수 있습니다. 

이동 후에 

keytool –list –alias 아까만든Alias –keystore 아까만든키스토어

ex)  keytool –list –alias bottari –keystore bottari.keystore


이렇게 쳐주시면 비밀번호 넣으라는 칸이 나옵니다. 아까 만들때 썼던 비밀번호를 치시면됩니다

알고 가실점은 비밀번호화면에서는 커서가 움직이지않습니다.

그냥 오타없이 쭉치시고 엔터 눌러주심됩니다.

그럼 아래 그림처럼 배포키를 얻을 수 있는 코드가 나옵니다.



그 코드를 복사 하시고 아래 Url로 이동하시고 

http://code.google.com/intl/ko/android/maps-api-signup.html


해당 네모에 그 코드를 넣습니다. 그리고 Generate API Key 버튼을 누르시면 구글 이메일 로그인을 해야합니다. 

로그인 하셨다면 다음 페이지가 나옵니다. 




위에 사용자키가 실질적인 구글맵 배포용 키입니다. 그 키를 복사하셔서 프로젝트에 맵뷰를 사용하는

xml로 가서 


이렇게 넣어주시면 됩니다. 

그러고 다시 맨위로 가시어 Export를 하신 후 Create new keystore가 아닌 Using Existing Keystore 체크 후 

아까 만드신 키스토어를 참조하여 APK를 뽑으시면 이제 마켓에 올려도 맵이 뜨게 됩니다 .

추가 정보는 여기서 확인 하실 수 있습니다 

http://cuteelfluv.cafe24.com/xe/etc/5446


 


posted by 젊은쎄오
:
Android 2011. 8. 26. 17:01



이렇게 EditText에서 긁은 텍스트의 렝쓰를 140 으로 걸면 영문이던 한글이던 140글자가 

넘으면 트윗이 안됩니다.
 

posted by 젊은쎄오
:
Android 2011. 8. 24. 20:00
트위터 관련 작업을 하다보니 트윗을 할 때 텍스트 외에 이미지나 위도 경도를 이용하여 위치를 

실어 보내야 하는 경우가 생겼습니다. 

우선 http://jeehun.egloos.com/4000125 이곳에 twitter4j를 연동 시키는 방법이 있습니다.

저도 이것을 토대로 작업을 하였습니다. 

우선 글씨를 트윗하는 방법은 updateStatus() 를 이용하면 되는데요 , 트위터 객체를 만들어 

Twitter twitter = factory.getInstance();
twitter.updateStatus("트윗 할 텍스트");

라고 써주시면 글씨가 올라가집니다.

이제 이미지 인데요 , 이미지도 마찬가지로 같은 방식으로 올리나 트윗픽을 이용하여 이미지를

올려야 합니다. 트윗픽은 제약이 있는데 현재 핸드폰안에 있는 이미지만 첨부가 됩니다.

다시말해 파싱받은 이미지 url은 바로 올리지 못하고 다운받아서 파일로 저장을 하고 그 패스를

받아서 올려야 합니다.

 


저는 다운 받는 매소드를 이렇게 뺐는데요, 저장 되어질 파일이름 스트링 변수와, 실질적인 이미지인 

이미지 url 을 파라미터로 받아서, sd카드에 저장시키도록 하였습니다, 저렇게하면 저 경로에 파라미터로 들어온

파일이름으로 저장이 되어집니다. 그리고 아래 onDelete 매소드를 호출하면 언제든지 저장된 이미지 파일은 

지워지구요, sd카드에 쓰려면 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

이 퍼미션 추가 해주셔야 합니다.

다시 본론으로 가서 이렇게 이미지를 받아서 그 패스를  

 

이런 식으로 is 에 넣습니다. 

path 에 들어가는 Environment.getExternalStorageDirectory().getAbsolutePath(); 이것은 현재 폰의 sd카드 경로를 

알아내는 함수입니다.


그러고 이렇게 이미지와 텍스트를 올리게 되는데 strResult 로 들어가는 upload는 트윗픽을 타고들어가 이미지를

올리고 트윗픽용 단축 url을 리턴받습니다, 마지막 줄에 보시면 트윗 할 텍스트에 한 칸 띄고 이미지 url이 

붙어 올라가는 것이죠. 
 



이렇게 텍스트 옆에 url이 붙습니다. 


이제 마지막 위치를 올리는 부분인데요, 한 줄로 끝나지만 알아내는데 엄청 고생했습니다.. 


이렇게 하면 됩니다, lat 과 lng 에 double  형으로 위도 경도를 넣어 주시면 됩니다.



이렇게 위치값이 실려 올라갑니다 , 

추가로 status = twitter.updateStatus(new StatusUpdate(Tweet).location(new GeoLocation(lat,lng))); 지도올리는 

부분에서 저 Tweet  은 String으로  트윗 할 메시지를 나타냅니다. 이미지 쪽을 보시면 트윗 할 메시지 + 이미지패스를

해서 올린걸 이용하면 저 Tweet에 트윗 할 메시지 + 이미지 패스를 넣어주시면 ,

글, 이미지, 위치 값 세개가 모두 올라가게 됩니다.

 



 보시면 우측에 이미지와 위치가 포함된 타임라인임을 알 수 있습니다 .




posted by 젊은쎄오
:
Android 2011. 8. 23. 22:46
twitter4j 를 쓰다가 오류가 났던 부분이 몇가지 있었습니다. 

그 중에 하나는 

The screen name / password combination seems to be invalid.Relevant discussions can be on the Internet at:

이것 인데 이건  http://dev.twitter.com/  여기서 인증 절차를 거쳐 받을 수 있는 

Consumer key , Consumer secret key 를 제대로 삽입을 안하셔서 그렇다고 합니다. 


제가 겪었던 문제는 

-1
Relevant discussions can be on the Internet at:

이 오류 였는데 트윗픽을 이용하여 이미지를 올릴 때 발생하였습니다. 처음은 올라가는데 그 다음은

익셉션을 일으키며 안되고 그 다음 올릴 때는 또 되고 그런식으로 되고 안되고를 반복하는 요상한

오류였습니다. http://ekwang.tistory.com/35 여기서 알게 되었는데 twitter4j 2.1.0 버젼부터

생겨난 일종의 버그였습니다.

아직 미해결 된 버그로 ,, 어떻게 할 방법이 없더군요, 

원인은 대략 처음 이미지 삽입요청 할 때 서버와 connection 되는데 이를 계속 유지하고 있어서

새로 올리려고 새로 connection을 요청하면 익셉션을 발생시키는 것이었습니다.

두번째 올릴 때 익셉션이 발생하면서 서버와의 연결이 끊어지는지 세번째 이미지를 올릴 때는 잘

올라 갔던 것입니다. 

제가 올리는 방식은 


이런 식인데 꼭 익셉션을 strResult = upload.upload("boddari.jpg", is, TweetText); 이 줄에서 뿌리더군요.. 

inputstream 에대해 잘 몰라서 is이 문제인줄알고 하루를 다 썼는데 원인은 위에 말씀드렸다시피..ㅠㅠ

무튼 제가 해결한 방법은,

이미지를 다 올린 시점에  
strResult = upload.upload("boddari.jpg", is, TweetText);

이걸 한번 더 써줬습니다.

그렇게 하여 이미지를 올린 후 한 번 더 호출하는 척을 하여 서버와의 연결을 익셉션을 발생시켜

끊어버리고 마무리하게 하였습니다.

사실 잘 모르겠습니다. 딱봐도 저게 해결방법은 아닌데 .. 내부적으로 익셉션은 발생하지만 겉으론

잘되는 그런 방법입니다.

그 외에는 라이브러리가 제대로 추가가 안되어서 오류가 나거나 빠르게 반복적으로 테스트하여

트위터 측에서 막아버리는 것이 있는데 그 목록은 여기 있습니다. 






posted by 젊은쎄오
:
Android 2011. 8. 22. 11:24
리스트 뷰를 사용하다 보면 Activity를 상속받을 때도 있고 ListActivity를 상속 받을 때도 있습니다. 

그냥 Activity를 상속 받은 곳이라면 해당 xml 에 ListView 의 id를 android:id="@+id/아무거나"

이런식으로 리스트뷰를 구분할 수 있는 임의의 아이디를 생성하여 사용할 수 있지만,

ListActivity 를 상속받은 곳이라면 이 아이디가 android:id="@android:id/list"   로 잡아주셔야 합니다. 

@는 참조를 의미하는데 @android는 안드로이드 패키지를 참조한다는 뜻으로  

@+id/list 이런식으로 아이디를 새로 만든다는 뜻이 아닌

기존에 있는 android.jar 파일의 list 아이디를 사용한다는 의미 입니다 .

사용방법도 다른데요 ,

android:id="@+id/ListView"  는 소스에서 R.id.ListView  이렇게 찾아 사용하지만 

android:id="android:id/list" 는  android.R.id.list 이렇게 써주어야만 연결이 됩니다.
posted by 젊은쎄오
:
JAVA 2011. 8. 19. 00:35
자바에서는 다중 상속을 허용하지 않습니다. 하지만 간혹 이미 다른 클래스를 상속받은 

서브클래스들의 필요한 부분을 모아 따로 슈퍼 클래스를 선언해야 할 상황이 있습니다.



그림과 같이 단행본 클래스와 부록 CD 클래스의 공통적인 기능을 추출하여 인터페이스로 만들 수 

있습니다. 다만 주의 할 점은 공통적인 기능(매소드)은 추출 할 수 있지만 , 공통적인 데이터는 

표현 할 수 없다는 제약이 있습니다. 

저렇게 추출한 인터페이스를 소스로 옮겨보면 


이렇게 됩니다, 클래스 선언과 비슷하지만 class 대신 interface 를 써서 선언합니다. 매소드의 로직은 

구상할 필요가 없는데 인터페이스에 속하는 매소드들은 무조건 추상 매소드로 선언해야 하기 

때문입니다.

이제 이걸 자세히 알아보기 위해 책 대여 클래스와 CD대여 클래스를 만들어 이 둘이 공통으로 쓰는 

기능을 인터페이스하여 어떻게 오버라이딩하는지 알아보겠습니다 


먼저 책 대여 클래스인데요, 번호, 책이름, 저자, 대출인, 대출일, 대출 상태등이 있습니다 

생성자로 먼저 번호와 책이름 , 저자를 받아놓고 checkOut 매소드를 오버라이딩하여 

여기에 실려 넘어오는 대출인과 대출일, 대출 상태등을 담아놓은 후 누가 언제 뭘 빌려갔다라고 

찍습니다.  반대로 checkIn 을 호출하면 대출인과 대출일을 null로 바꾸고 대출상태도 0으로 바꿉니다


이제 시디 대여 클래스인데 얘는 CDInfo 라는 클래스를  이미 상속 받고 있습니다 .


CDInfo는 별거 없고 , 단지 시디 관련 번호와 시디 제목을 담아 놓습니다.

다시 시디 대여 클래스로 가보면 생성자로 시디 번호와 시디 타이틀을 받아 슈퍼클래스인 

CDInfo에 담아 놓습니다. checkOut 과 checkIn은 책 대여 클래스와 기능이 동일합니다. 

단지 책 제목이냐 시디 제목이냐가 다른데요,



 

이제 이것을 실행 해 보면



이렇게 찍히게 됩니다. 

이처럼 라이브러리는 이미 다른 상속을 받고있는 서브 클래스라 하더라도 비슷한 기능을 추출하여

안에 그 기능을 추상 매소드로 만들어 놓음으로써 필요한 클래스들이 얼마든지 implements 하여

오버라이딩 할 수 있다는 장점이 있습니다. 









출판사 : 한빛미디어 , 저자 : 김윤명 님의 뇌를 자극하는 Java프로그래밍에서 공부한 내용입니다. 

'JAVA' 카테고리의 다른 글

JAVA] 현재 날짜, 시간 구하기  (1) 2011.11.30
JAVA] split으로 문자열 나누기  (0) 2011.10.17
JAVA] drawRect 속성 알아보기  (1) 2011.08.18
JAVA] String 원하는 만큼 잘라내기  (0) 2011.08.04
JAVA] 21. 클래스의 상속  (0) 2011.06.22
posted by 젊은쎄오
: