페이지

2010년 10월 31일 일요일

당진 대호지만 배스낚시 여행 사진

그저 낚시를 하겠다는 생각으로 떠난 낚시여행
낚시터에 도착하니 우릴 맞이해 주는 저녁노을(10분만 일찍 도착했으면 낙조를 볼수 있었는데..)














도착후 처음하는 루어낚씨라 루어던지기연습으로 몸을 풀다보니 어느새 9시
아 내일 일찍 일어나야하니 저녁을 먹기로 하고
바로 옆 슈퍼에서 컵라면 + 맥주로 요기한 후 잠을 청했다.

그리고 담날 아침6시 알람을 무시하고 7시 기상.
바로 낚시 채비를 마치고 실전 루어낚시를 시작했다.
우리의 타겟은 배스.

아 그러나 아침에 친구넘이 25Cm짜리 하나 잡고 그 후 감감 무소식..
그리고 9시30분에 식당에서 아침을 먹고
다시 낚시 ㄱㄱㄱ

으.......... 입질도 없다.
그렇게 시간이 흘러 오후 3시쯔음에 드뎌 입질이 오기  시작했다
미끼선택과 포인트를 잘 못잡고 헤매다가 드디어 찾은듯하다.
노가리만한 넘 몇마리 잡더니 드디어

30Cm 짜리가 낚였다.. 우왕크굿!!

노가리는 다시 물속으로 던져주고 요 두마리는 일단 포획
사실 배스가 육식어종이다 보니 토종어종들이 대부분 배스의 먹이감이 되다시피해서
잡아서 없애야하는 실정이다.
어쨌든. 그렇게 친구넘 잡는거 구경하다가 드뎌 나에게도 손맛을 준넘이 있는데...
아!!!! 노가리사이즈. ㅠㅠ

그래도 굴하지 않고 열낚시해서 잡았다 25Cm짜리

좀 더 커보이라고 앞으로 내밀었지만 실제 사이즈는 오른쪽 ㅋㅋ

그렇게 손맛을 보고 철수를 하려는데 때마침 어제 못본 낙조가 예쁘게 하늘을 수놓고 있었다.



다음 낚시를 기대하며 나의 첫 루어낚시 끝..

2010년 10월 26일 화요일

플렉스 예전에 만든 로또 6/45 번호 생성기


예전에 취미삼아 플렉스로 만들었던 로또 6/45 번호생성기입니다.

안드로이드 재미삼아 만드는 Calendar(달력/일정)

BaseAdapter 구현 클래스에서의 Intent 호출 문제와
SQLite query시 커서이용 문제등을 겨우겨우 해결하여
달력에 일정을 저장하고 보여주는때까지 만들었다.
물론 구글캘린더에 비하면 초딩수준일지 모르지만
하나씩 하나씩 맹글어가는 재미가 쏠쏠하다.
시간나면 좀더 다듬어야겠다.
월간말고 주간/일간 등 구글 캘린더의 일정등록시 필요한 정보들을
다 관리할 수 있도록 해봐야겠다. 그게 언젠지는 모르지만...

안드로이드 SQLite3 query를 통한 Cusor 사용시 이상한 문제

일반적으로 안드로이드에서 SQLite3 DB를 이용하여 여러 Row의 데이터를 읽을때
아래처럼 코딩을 주로 한다.
    int rowCnt = 0;
  String strWhere = " keyIdx= ?";
  String args[] = {"keyValue"};
  String getColumns[] = {"a", "b", "c"};

  Cursor cus = sdb.query(MY_TABLE_NAME, getColumns, strWhere, args, null, null, "cal_day, cal_degree desc");

  try{
   rowCnt = cus.getCount();
   if(rowCnt > 0){
    int i = 0;
 
    cus.moveToFirst();
    data = null;
    data = new testData[cus.getCount()];
 
    int a = cus.getColumnIndex("a");
    int b = cus.getColumnIndex("b");
    int c = cus.getColumnIndex("c");
    do{
     try{
      data[i] = new testData();
   
      data[i].setA(cus.getString(a));
      data[i].setB(cus.getInt(b));
      data[i].setC(cus.getInt(c));
   
     }catch(Exception e){
      e.printStackTrace();
     }
     i++;
    }while(cus.moveToNext());


그러나 불행히도 이렇게 하니 자꾸만 아래와 같은 에러가 난다.
ERROR/CursorWindow(275): Bad request for field slot 0,-1. numRows = 2, numColumns = 3
물론 위의 에러 중 numRows는 데이터 Row가 2개라는 거니 맞고 numcolumns 또한 세개를 가져오라는 거니 맞다 단  Bad request for field slot 0,-1. <-- 요게 문제다..
아무리 해도 데이터를 제대로 가져오지 못해서 결국 아래와 같이 바꿨더니 해결되었다.
아래의 빨간색 글을 확인해보자

  int rowCnt = 0;
  String strWhere = " keyIdx= ?";
  String args[] = {"keyValue"};
  String getColumns[] = {"a", "b", "c"};


  Cursor cus = sdb.query(MY_TABLE_NAME, getColumns, strWhere, args, null, null, "cal_day, cal_degree desc");


  try{
   rowCnt = cus.getCount();
   if(rowCnt > 0){
    int i = 0;
   
    cus.moveToFirst();
    data = null;
    data = new testData[cus.getCount()];
   
    int idx = 0;//cus.getColumnIndex("a");
    int yea = 1;//cus.getColumnIndex("b");
    int mon = 2;//cus.getColumnIndex("c");
 


   do{
     try{
      data[i] = new testData();
     
      data[i].setA(cus.getString(a));
      data[i].setB(cus.getInt(b));
      data[i].setC(cus.getInt(c));
     
     }catch(Exception e){
      e.printStackTrace();
     }
     i++;
    }while(cus.moveToNext());

저렇게 무식하게 해야만 해결하는 걸까..
아직 서핑실력의 부족 & 영문독해실력 부족으로 여기까지밖에 해결책을 찾지 못했다 ㅠㅠ

안드로이드 BaseAdapter를 구현(implement)한 객체에서의 Intent 사용 중 문제해결

어제 말한대로 오늘 달력에 일정을 저장할 수 있도록 작업을 해보았다.
그러나 커다란 문제(사실 잘 몰라서 생긴)에 봉착하고 이를 해결하기 위해 열심히 서핑을 했다

애초부터 Activity객체 자체에서 BaseAdapter를 Implement했으면 문제가 발생하지 않았겠지만
이왕하는거 BaseAdapter를 Implement하는 객체를 생성 작업하기로 한게 문제였다.

일반적인 상황에선 문제가 안되지만
BaseAdapter를 구현한 객체에서 Intent를 생성하려니 그 방법을 알 수가 없었다.

그러다 어찌어찌 서핑을 통해 가능하다는건 알았지만 구체적인 해결방법을 명확하게
제시한 곳을 못찾다가 겨우 겨우 해결할 수 있었다.

그 소스를 잠시 소개하자만

@@ xxx.java <-- Activity 객체
     ... 중간 생략
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

       testAdapter test = new testAdapter(this);
      test.xxxMethodCall();
}

@@testAdapter.java <-- BaseAdapter를 구현한 객체
  private Context  cont;
  public testAdapter(Context mContext){
     cont = mContext;
  }
    .... 중간 생략
  private void xxxMethod(){
      Intent intent = new Intent(cont, newJava.class);
      mContext.startActivity(intent); // 그냥 컨텍스트 받은 넘으로 바로 처리한다.
 }

위 처럼 빨간 줄만 잘 하면 문제가 없다. 저리 쉬운걸 ㅠㅠㅠ
역시 제대로 배우려면 책 한권 사는것 뿐만아니라 학원도 가고 그래야 하는데.

그저 서핑으로만 하려니 조끔 힘들다..

2010년 10월 25일 월요일

안드로이드 재미삼아 만드는 달력

오늘도 칼퇴근 후 뒤적뒤적 서핑하며 달력을 만들어 보았다.
내일은 여기에 일정을 넣어봐야쥐 ^^

제주도 올레길 중 애월해안길 옆 올레

제주의 검붉은 현무암과 푸른바다, 그리고 아기자기한 올레길

특히나 멀찌기 보이는 에머럴드빛 바다가 너무 이쁘다

2010년 10월 24일 일요일

2010년 10월 23일 토요일

안드로이드 android:style/Theme.Dialog 테마로 띄운 창에 데이터 주고 받기

다이얼로그 테마로 띄운 창에 데이터 넘겨주기
아래의 빨간색이 테마창에 데이터를 넘기는 방법이다.
@@ java
   Intent intent = new Intent(testMain.this,DialogText.class);
   intent.putExtra("index", 1);
   intent.putExtra("name", "test");
   intent.putExtra("isTest", true);
  
   startActivityForResult(intent, 1); // Sub_Activity 호출

그럼 새로 띄운 테마에서 받을때는 어떻게 하는지 보자
마찬가지로 아래의 빨간글을 참고하면 된다.
@@java
        Intent intent = getIntent(); // 이 액티비티를 시작하게 한 인텐트를 호출
        int idx = intent.getIntExtra("index", 0); // 값을 안넘겼을 경우 디폴트 0으로 받음.
        String name = intent.getIntExtra("name");

        boolean test = intent.getIntExtra("isTest", false);

그렇다면 새로 띄운 테마에서 다시 데이터를 보내고 받을때는 어떻게 할까?
테마를 띄울때나 받을때나 똑같이 하면된다.

단 띄운 테마로부터 데이터를 받을때는
아래의 메소드를 반드시 오버라이드해서 처리해야한다.
@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data){
  super.onActivityResult(requestCode, resultCode, data);

// 액티비티가 정상적으로 종료되었을 경우
  if(resultCode==RESULT_OK){   
   if(requestCode==1){   
    // 받아온 값을 처리한다.
    String whatIntent = data.getStringExtra("whatIntent"); // 여기서 데이터 받는다

안드로이드 CompoundButton.OnCheckedChangeListener 구현시

체크박스 구현 예제가 대부분 단일 체크박스에 대한 부분만 있어서
두개 이상의 체크박스를 구현할 때 리스너 처리를 아래와 같이 xml에서 체크박스에 tag를 지정하여 처리한다

@@ xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" android:orientation="vertical">
   <TableLayout android:id="@+id/TableLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content">
    <TableRow>
   <TextView android:id="@+id/sound_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:width="220dip" android:text="@string/sound_msg"></TextView>
   <CheckBox android:id="@+id/sound_check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/yes_msg" android:tag="77"></CheckBox>
  </TableRow>
  <TableRow>
   <TextView android:id="@+id/init_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/init_msg"></TextView>
   <CheckBox android:id="@+id/init_check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/yes_msg" android:tag="33"></CheckBox>
  </TableRow>
 </TableLayout>
</LinearLayout>

@@java
public class checkBoxTest extends Activity implements CompoundButton.OnCheckedChangeListener {
    CheckBox initBox;
    CheckBox soundBox;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.option);
            
        initBox = (CheckBox)findViewById(R.id.init_check);
        initBox.setOnCheckedChangeListener(this);
    }
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
   
     String targetBtn = (String)buttonView.getTag();
   
     if(targetBtn.equals("33")){ // 초기화 박스 클릭 시

         if (isChecked) {
          //do something        
         }
     }else{ // 사운드 박스 클릭 시
            //do something
     }
    }

매일밤 레이져쇼가 열리는 홍콩!! 심포니 오브 나이트


올 2월 날씨가 매우 흐려서(비까지 내리는 ㅠㅠ) 깔끔한 샷은 안나왔지만
그래도 멋진 광경이었다는..