2010년 11월 29일 월요일

Option Menu 만들기

private static final int MENU_LOGIN = 1;
private static final int MENU_SETTING = 2;
private static final int MENU_LOGOUT = 3;
private static boolean IsLogin = false;

// 초기 메뉴 생성시 호출
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (IsLogin)
        menu.add(0, MENU_LOGOUT, 1, "로그아웃");
    else
        menu.add(0, MENU_LOGIN, 1, "로그인");
    menu.add(0, MENU_SETTING, 2, "셋팅");
    return true;
}

//메뉴 버튼 눌렀을 때 호출
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    menu.removeGroup(0);
    if (IsLogin)
        menu.add(0, MENU_LOGOUT, 1, "로그아웃");
    else
        menu.add(0, MENU_LOGIN, 1, "로그인");
    menu.add(0, MENU_SETTING, 2, "셋팅");
    return true;    
}

//메뉴를 선택했을 때 각 메뉴마다 동작 처리
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Intent intent;
    switch (item.getItemId())
    {
        case MENU_LOGIN :
            /* 로그인 동작 */
            IsLogin = true;
            return true;
        case MENU_SETTING :
            /* 셋팅으로 이동 */
            return true;
        case MENU_LOGOUT :
            /* 로그아웃 동작 */
            IsLogin = false;
            return true;
    }
    return false;
}

httpclient를 이용한 webpage 긁어오기

public void TestHttpClient ()
{
private StringBuilder sb;
HttpClient httpclient = new DefaultHttpClient();
localContext = new BasicHttpContext();
// Set HttpPost
HttpPost httppost = new HttpPost(LOGIN);

// Set Post Param
List<NameValuePair> paramList = new ArrayList<NameValuePair>();
paramList.add(new BasicNameValuePair("user_id", ID));
paramList.add(new BasicNameValuePair("password", PW));
httppost.setEntity(new UrlEncodedFormEntity(paramList));
     
// execute Post \ return Response
HttpResponse response = httpclient.execute(httppost, localContext);
// 200 OK ?
if(HttpStatus.SC_OK == response.getStatusLine().getStatusCode())
{
// Set HttpGet

httppost = new HttpPost(BOARD);

paramList = new ArrayList<NameValuePair>();

paramList.add(new BasicNameValuePair("id", BoardID));

paramList.add(new BasicNameValuePair("page", String.valueOf(PageNum)));

if(SearchKey != null)

       {
        if(SN)
            paramList.add(new BasicNameValuePair("sn", "on"));
           else
              paramList.add(new BasicNameValuePair("sn", "off"));
           if(SS)
              paramList.add(new BasicNameValuePair("ss", "on"));
           else
              paramList.add(new BasicNameValuePair("ss", "off"));
           if(SC)
              paramList.add(new BasicNameValuePair("sc", "on"));
           else
            paramList.add(new BasicNameValuePair("sc", "off"));

           String temp = URLEncoder.encode(SearchKey, "euc-kr");
           paramList.add(new BasicNameValuePair("keyword", temp));
}

       httppost.setEntity(new UrlEncodedFormEntity(paramList));
    // execute Get \ return Response
    response = httpclient.execute(httppost, localContext);
   
    // 200 OK?
       if(HttpStatus.SC_OK == response.getStatusLine().getStatusCode())
{

  // Get Context
           InputStream instream = response.getEntity().getContent();
           BufferedReader reader
= new BufferedReader(new InputStreamReader(instream, "euc-kr"));

           String line = null;
           while(null != (line = reader.readLine()))
            {
  sb.append(line);
               sb.append('\n');
           }

            System.out.println(sb);
  }
  }
}


실제 웹페이지 뷰어를 제작할 때 사용한 코드입니다.

paramList.add를 사용, 실제 url에 포함되는 값들을

넣어주면 해당되는 값을 가져오게 됩니다.

또한 한 번 로그인을 하면 localContext 객체 안에 쿠키 정보가 저장되므로

더이상 로그인을 하지 않아도 상관없습니다. (단 사이트마다 다를 수 있음)

자세한 것은 http://hc.apache.org/ 참조. 위 소스코드는 httpclient 3.x 기반

onListItemClick 과 setOnClickListener

onListItemClick - ListActivity에서 사용되는 함수. ListView의 하나의 List를 Click했을 시 반응

setOnClickListener - View Listener. 하나의 View를 클릭했을 시 반응


만약 커스텀 ListView를 생성했을 시,

열 전체 Click에 관한 동작은 onListItemClick 함수에,

열 내부의 View 하나하나에 대한 ClicksetOnClickListener 함수에 구현.

2010년 11월 20일 토요일

북한산 둘레길 탐방기

일시 : 2010년 10월 15일
트레킹코스 : 솔샘길 -> 흰구름길 -> 순례길
소요시간 : 12시 경 출발 / 4시 도착
사용카메라 : NexusOne

회사에서 단체로 북한산 둘레길을 갔다왔습니다.

모니터와 키보드에서 벗어나 흙을 밟고 풀 내음을 맡으며

나무 그늘 밑을 거닐다 보니 상쾌한 기분이 너무 좋더군요 ^^


본사에서 10시에 모여 출석체크를 하고

준비물을 챙긴 뒤 각자 북한산을 향해 출발했습니다.

저희 일행은 구로디지털단지역에서

2호선 내부순환선을 타고 동대문운동장에서

4호선으로 환승, 길음역에서 내려

143번 버스를 탔습니다. 버스 종점에서 하차 후

조금 올라가니 이 곳이 나오더군요.

북한산 탐방안내소(정릉)

챙겨온 김밥으로 간단한 점심(?)을 먹은 뒤

모두가 도착할 때까지 대기했습니다.



옆에 있던 나무에서 가을 향기가 물씬 풍기네요

자 이제 출발입니다 ㅋㅋ

이건 누구 발??

흠 초상권(?)때문에 안면이 나온 사진을

빼다보니 내용이 끊기네요 이런...

솔샘길 초입 공원에서...

저 곳은 대체 어디인지...

가다보니 솔샘길은 끝나고 흰구름길...이 나오나 전부 초상권관계로 패스...쩝

흰 구름길 중간에 있었던 전망대(?)

공사중인 듯한 전망대가 있었는데 용기를 내서 올라갔습니다.

확실히 전망은 좋더군요. ㅋ 하지만 문제가...







원래 파노라마 용으로 쓰려던 사진인데...제대로 분할 못한 것도 있지만

첫번째와 두번째 사진은 손가락이 찬조출현해주셔서...그냥 못 쓰는 겁니다 크흑

걷기 운동이란 이런 것이다!!
가장 마음에 드는 컷!


솔샘길과 다르게 흰 구름길은 무척이나 길더군요.

길을 잘못 든게 아닐까 오해할 정도로 말이죠.

하지만 오며 가며 함께 했던 둘레길 인증(?) 마크!!

이 녀석이 있었기에 초행길임에도

길을 잃지않고 무사히 완주할 뻔 했습니다만...

여기서부터는 순례길... 가장 경치가 좋았습니다!
목적지인 솔밭공원이 얼마 남지 않았군요


손가락 님 찬조출현...하아


이 숲까지는 길을 잘 찾아갔으나 주택가에 들어섰을 때 순간

인증마크를 보지 못했는지 다른 길로 들어섰고...

결국은 큰 도로로 나와서 지도를 보면서 공원으로 바로 향했습니다 ㅎ

도착 인증샷!!

전체 참여 인원 중 가장 먼저 도착했습니다.

쉬지 않고 걸은 덕분이긴 하지만...

그런데 상품 같은 건 없더군요 쳇

솔밭공원은 이름대로 소나무가 참 많았는데 분위기가 괜찮았습니다.

어리숙한 촬영실력으로 인해 제대로 찍지 못한 게 아쉽네요 ㅜ ㅠ





열심히 공 차고 놀던 꼬맹이들...

어찌됐던 4시간여를 지나 무사히 목적지에 도착했습니다.

오랫만에 몸을 움직이니 살아있다는 것을 느꼈다고 해야하나??

하지만 저녁 먹으러 1km이상을 걸었던 건 확실히 힘들었습니다.

배터리도 다 되어서 맛있는 고기 사진도 못 찍었구 흑흑


다음엔 혼자서 천천히 돌아봐야겠네요.

수많은 코스 중 겨우 3코스만을 돌아봤으니 말이죠.

...뭔가 바로 앞의 글과 결말이 반대가 되는 것 같긴한데...상관없겠죠 훗