1. onCreate 함수 오버라이딩 연습
: oncr까지 입력후 Ctrl + Space 를 눌러 코드검색하여 함수 완성
1) MyNote1
2) MyNote2
3) MyGameMain
4) MyUserList
5) MyGameMenu

2. onResume 함수 오버라이딩
1) MyNote1
2) MyNote2

3. onCreateContextMenu함수 오버라이딩
1) MyGameMenu

==========================
클래스 import : Ctrl + Shift + O

1. MyNote1 액티비티의 onCreate에서....

1) Button btn; 선언하고 클래스 import 추가
2) Date dt; 선언하고 java.util.Date import 추가
3) EditText ed; 선언하고 클래스 import 추가

==========================
1. my_edit_text.xml 수정

1) TextView에 다음의 3개 속성 추가
    android:textColor="#FFFF00"
    android:textStyle="bold"
    android:textSize="20px"

2) EditText에 다음의 2개 속성 추가
   android:hint="글자를 입력하면 글자수를 체크합니다"
   android:singleLine="true"

2. MyEditText.java를 수정 (클릭 리스너 처리)

1) OK버튼을 누르면 입력한 글자로 검색을 실행하게 한다.
     Intent intent = new Intent(Intent.ACTION_SEARCH);
     intent.putExtra(SearchManager.QUERY, 에디트텍스트에 입력된 값);
     startActivity(intent);

2) CANCEL 버튼을 누르면 에디트 텍스트에 입력된 글자를 지운다.
     ed.setText("");


3.MyImageView.java 수정
: 이미지 버튼을 눌러 배경 설정하기 전에 AlertDialog로 다음과 같은 메시지를 띄우도록 고친다.
 "현재 이미지를 배경화면으로 설정합니다"


new AlertDialog.Builder(MyImageView.this)
.setTitle("알림")
.setMessage("현재 이미지를 배경화면으로 설정합니다")
.setNegativeButton("취소", null)
.setNeutralButton("확인", new DialogInterface.OnClickListener() {
 @Override
 public void onClick(DialogInterface dialog, int which) {
                      // 여기에 iv.setDrawingCacheEnabled 부터 try ~ catch 까지 카피  
 }
})
.show(); 

==========================================
[실습] 두 수의 합을 출력하는 앱 작성

1. 레이아웃: my_cal.xml
1) EditText 2개 추가 (id는 각각 ed1, ed2)
- EditText의 다음의 속성 추가: android:inputType="number"
2) Button 1개 추가 (id는 btn_cal)

2. 액티비티 : MyCal.java
: 버튼을 누르면 EditText에 입력된 숫자값의 합을 Toast로 출력한다.
   // 합 계산 방법
   int res = Integer.parseInt(ed1.getText().toString())
   +  Integer.parseInt(ed2.getText().toString())

 

// layout_gravity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <Button android:text="Button01"
  android:layout_gravity="right"
     android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>
 <Button android:text="Button02"
  android:layout_gravity="left"
     android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>  
</LinearLayout>


[실습] MyScrollView.java 수정
:createWidgets함수에 ImageView를 동적으로 생성해서 같이 추가하도록 한다.

    ImageView img = new ImageView(this);
    img.setImageResource(R.drawable.zzangu0);
    layout.addView(img);

 

[현재 접속자 현황]
로그인
    로그인 유지

회원 가입
아이디/비밀번호 찾기
 최근 등록된 글[smilejsu]  가입인사 드... [1] [smilejsu]  AsExam2_연... [1] [enable]  안녕하세요 ... [1] [okgosu]  안드로이드를... [okgosu]  안드로이드 ... [안녕안녕]  아.. 안녕하... [1] [한쏘]  안드로이드 ... [2] [뼝뼝]  AsExam4-3에... [1] [안녕안녕]  안녕하세요. [1] [이정인]  안녕하세요~... [1] [고복수] 유투브 동영... [okgosu] 2011년 새해... [okgosu] DataGrid에... [gt1000] Flex Bui... [1] [플렉스추종자]  플렉스 작업... [1] [무소속] p.170 소스... [1] [다알고] 콘솔창에 텍... [2] 최근 답변 댓글[okgosu]잘 해결되신거죠?앞으...[okgosu]반갑습니다^^열심히 하...[okgosu]프로젝트를 나눈다는 ...[okgosu]스테이지 크기는 클래...[이시연]강좌는 매주 월,목에...[한쏘]2.2 에서도 jpg 일...[okgosu]안드로이드 2.1에는 ...[okgosu]정확하게 하신겁니다^...[okgosu]Sound 클래스를 이용...[okgosu]AsExam4_3.as는 As...[dghdfghdfghdfghdhd][복습문제35-1]이상한...[chlwldndf][복습 -2, 3) [복습h...[okgosu]바뀌는 것도 있고 안...[다알고]trace()가 뭔가 했는...[okgosu]textInputHandler를...홈 > 안드로이드 > 안드로이드 TIP > Java Android 기초 ... 안드로이드 관련 팁 게시판입니다. 글수 17회원 가입로그인Java Android 기초 개요 및 팁okgosuhttp://okgosu.net/zbxe/248212010.12.23 17:06:40 (*.72.110.29) 221Java Version
: 6이 최신 (JDK 1.6)


Java SDK
- Java SE : Standard Edition
- Java EE : Enterprise Edition (EJB)
- Java ME : Mobile Edition (폰)


커맨트창: 윈도우 + R --> cmd


자바버전 확인 : java -version


[자바 명령어]
자바컴파일 : javac (*.java --> *.class)
자바실행: java (*.class를 JVM(자바가상머신)이 실행)


[메모장] 윈도우 + R --> notepad


[실습1]
* 클래스명: MyJavaExam1
* 파일은 MyJavaExam1.java로 저장


[클래스패스]
*.class를 찾아 가는 경로
환경변수에 CLASSPATH를 추가
--> .;c:\java\자기작업폴더;
(.은 현재 경로)


[실습2]
* 클래스명: MyJavaExam2
* 파일은 MyJavaExam2.java로 저장
* main 함수 안에
1) myname 변수 선언 : String myname;
2) myname = args[0];
3) System.out.println("당신의 이름은 " + myname + "입니다");
* 실행 : java MyJavaExam2 okgosu


[실습3]
* 클래스명: MyJavaExam3
* 파일은 MyJavaExam3.java로 저장
* main 함수 안에
1) myarr 배열 선언 : String[] myarr= new String[5];
2) 배열값 할당
myarr[0] = "백두산";
myarr[1] = "설악산";
--> 이런식으로 myarr[4]까지
3) 출력
System.out.println(myarr[0]);
System.out.println(myarr[1]);
--> 이런식으로 myarr[4]까지


[배열선언방법 -1]
String[] myarr= new String[3];
myarr[0] = "백두산";
myarr[1] = "설악산";
myarr[2] = "한라산";


[배열선언방법 -2]: 배열 선언과 동시에 초기화
String[] myarr = {"백두산", "설악산", "한라산"};


[배열값 출력-1]
for(int i=0; i     System.out.println(myarr[i]);
}
[배열값 출력-2]
for(String item:myarr) {
     System.out.println(item);
}

 

 


[실습4]
* 클래스명: MyJavaExam4
* 파일은 MyJavaExam4.java로 저장
* main 함수 안에
1) mynum 변수 선언
int mynum = Integer.parseInt(args[0]); // 입력된 값을 숫자로
2) 입력값 판별
if(mynum <60) {
    System.out.println("F");
} else if(mynum >= 60 && mynum <70) {
    System.out.println("D");
} else if(mynum >= 70 && mynum <80) {
    System.out.println("C");
} else if(mynum >= 80 && mynum <90) {
    System.out.println("B");
} else if(mynum >= 90 ) {
    System.out.println("A");
}
3) 실행 : java MyJavaExam4 90


[실습5]
* 클래스명: MyJavaExam5
* 파일은 MyJavaExam5.java로 저장
* main 함수 안에 이중 for문 작성


         for(int i=0; i<10; i++) {
              for(int j=0; j<10; j++) {
                   System.out.println(i + " * " + j + " = " + (i*j));
                    // 2 * 1 = 2
                    // 2 * 2 = 4
              }        
         }


[실습6]
 MyJavaExam6에 다음을 추가


1) print99 메소드 구현
구구단의 단수를 입력 받아 해당하는 단수의 구구단 출력


static void print99(int num) {
    // num에 해당하는 단 출력
}


2) main
print99(3); 하면 3단 출력


* 99단을 거꾸로
9 * 9 = 81
9 * 8 = 72
....
2 * 1 = 2
[실습7] MyJavaExam7 작성 : 두 수를 입력 받아 합을 계산
 
1) main 함수 정의
2) int 변수 num1, num2, result 정의
3) main의 args.length >= 2이면
num1= Integer.parseInt(args[0]);
num2= Integer.parseInt(args[1]);


4) addNum함수 호출결과를 result에 할당하고 result 값 출력
result = addNum(num1, num2);
System.out.println("결과:" + result);


5) addNum함수 정의
: 두 수의 합을 리턴함


* 실행: java MyExam7 10 20
* 결과: 30


[Exception]
1. ArithMathicException : 0으로 나눌때
2. ArrayIndexOutOfBoundsException : 배열의 인덱스값을 벗어날때
3. NullPointerException : null값인 변수의 값을 출력하려고 할때


[비트와 바이트]
8비트 = 1바이트
int 변수 4Byte = 32Bit


byte가 표현할수 있는 값? (1바이트)
--> 256가지(2의 8승) : -128(2의 -8승) ~ 127(2의 8승 -1)까지


[실습8] MyJavaExam8 작성 : flag 변수의 활용해서 솟수 찾기


1. java 클래스 작성 : MyJavaExam8


2. main 함수
1~100까지 for문을 돌면서 isPrime함수를 호출하여
숫자가 솟수이면 System.out으로 출력


3. isPrime 함수 선언 : static boolean isPrime(int num)
--> 숫자가 솟수면 true 리턴
(2부터 그 숫자까지 나눠서 나머지가 0인 경우가 2건 미만이면)
--> 숫자가 솟수가 아니면 false 리턴


[실습9]MyJavaExam9 작성: 숫자 맞추기 게임
1. java 클래스 작성 : MyJavaExam9
2. main 함수
1) 랜덤한  0~100사이의 값(int)을 생성: int comNum = (int)Math.random()*100;
2) System.in으로 부터 입력값을 계속 받음
 String input = "";
 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
 try{
      while ((input = in.readLine()) != null) {
          System.out.println("입력한 값" + input);
          int check = Integer.parseInt(input);
          // 입력값 비교
       }
 } catch(Exception e) {
 }
3) 입력한 값을 비교 (큰지, 같은지, 작은지)해서 비교 결과 출력
크면 : 입력한 값 XX는 정답보다 큽니다.
같으면 : "정답입니다." 출력후 System.exit(0);
작으면 : 입력한 값 XX는 정답보다 작습니다.


4) 입력한 값이 "exit"면 System.exit(0);

 


[2일차]
예제 4-8
예제 4-11


[실습10]
: main의 args로부터 입력받은 두 수를 비교한 결과를 리턴
1. java 클래스 작성 : MyJavaExam2_1


2. main 함수
1) int 타입 변수  num1, num2 선언
2) args로부터 입력받은 파라미터를 int타입으로 변환
num1 = Integer.parseInt(args[0]);
num2 = Integer.parseInt(args[1]);


3. compNum
두 수를 비교하여 크면 1, 같으면 0, 작으면 -1을 리턴


4. main
:  두 수를 비교하는 함수 호출한 결과에 따라 System.out으로 메시지 출력
int res = compNum(num1, num2);


[클래스의 사용]
1. 클래스 선언 예
public class MyObj {
     public String name = "MyObj";
     public String getResult() {
           return "OK";
     }
}
2. 다른 클래스에서 사용 예
1) 클래스 타입 변수 선언 : MyObj m;
2) new 연산자를 이용해서 클래스 인스턴스 생성 m = new MyObj();
* ObjTest클래스에서 MyObj의 클래스 사용예
public class ObjTest {
     public static void main(String[] args) {
           MyObj m = new MyObj();
           System.out.println(m.name);
           String res = m.getResult();
           System.out.println(res); // 같음  System.out.println(m.getResult());
     }
}


[실습11]
: MyJavaExam2_1 클래스 사용하는 MyJavaExam2_2 작성
1. java 클래스 작성 : MyJavaExam2_2


2. main 함수
1) int 타입 변수  num1, num2 선언


2) args로부터 입력받은 파라미터를 int타입으로 변환
num1 = Integer.parseInt(args[0]);
num2 = Integer.parseInt(args[1]);


3) MyJavaExam2_1 변수 선언
MyJavaExam2_1 me;


4) MyJavaExam2_1 인스턴스 생성
me = new MyJavaExam2_1();


5) MyJavaExam2_1의 compNum함수 호출
int res = me.compNum(num1, num2);


3. main
:  두 수를 비교하는 함수 호출한 결과에 따라 System.out으로 메시지 출력
int res = compNum(num1, num2);


[실습12] MyJavaExam2_3 클래스 생성


1. 멤버 변수 선언
public int n1;
public int n2;


2. compNum 함수 선언
public int compNum() {
   int res = 0;
   if(n1 > n2 ) {
       res = 1;
    } else if (n1 < n2) {
       res = -1;
    }
    return res;
}


3. MyJavaExam2_4클래스 생성하여 main에서  MyJavaExam2_3을 활용하여 두 수의 값을 비교


   MyJavaExam2_3 me = new MyJavaExam2_3();
   me.n1 = 10;
   me.n2 = 20;
   int res = me.compNum();
// res 결과값에 따른 출력....switch문 이용


[실습 13] MyJavaExam2_3 클래스에 생성자 함수 2개 추가
1. MyJavaExam2_3 생성자 함수 - 1 (디폴트 생성자)
public MyJavaExam2_3 () {
}


2. MyJavaExam2_3 생성자 함수 - 2
public MyJavaExam2_3 (int p1, int p2) {
     this.n1 = p1;
     this.n2 = p2;
}


3. MyJavaExam2_3에 printResult함수 추가
public void printResult(int res) {
    switch(res) {
 case 0:
  System.out.print(n1 + "과 " + n2 + "는 같습니다");
  break;
 case 1:
  System.out.print(n1 + "이 " + n2 + "보다 큽니다");
  break;
 case -1:
  System.out.print(n1 + "이 " + n2 + "보다 작습니다");
  break;
     }
}
4. MyJavaExam2_4의 main 로직 변경
MyJavaExam2_3 me = new MyJavaExam2_3(10, 20);
int res = me.compNum();
me.printResult(res);


[실습 14] MyJavaExam2_3을 static 화


1. 멤버 변수를 static 변수로 선언
public static int n1;
public static int n2;


2. compNum을 static 메서드로
public int compNum() --> public static int compNum()


3. printResult를 static 메서드로
public void printResult(int res)  --> public static void printResult(int res) {


4. MyJavaExam2_4의 main 로직추가


MyJavaExam2_3.n1 = 10;
MyJavaExam2_3.n2 = 20;
int res = MyJavaExam2_3.compNum();
MyJavaExam2_3.printResult(res);


* static : 인스턴스화를 거치지 않고 멤버변수나 메서드에 접근 가능
- 자주 사용되는 멤버변수나 메서드에 대해 적용
예) Math.PI,  Math.random(), Intent.ACTION_INSERT 등


[실습 15] 접근 제한자 용도


* 접근제한자 종류
1) public (모든 클래스에서 접근 가능)
2) private (그 클래스 내부에서만)
3) protected (상속관계의 클래스에서)
4) 제한자 없음 (디폴트, 같은 패키지(폴더)에 있는 클래스들 끼리)


MyJavaExam2_3에 대해서


1. n1 멤버 변수를 다음과 같이 바꾸면?
public static int n1;  --> private static int n1;


2. compNum을 메서드를 다음과 같이 바꾸면
public static int compNum() --> private static int compNum()


3. n1 멤버 변수를 다음과 같이 바꾸면?
public static int n1;  --> static int n1;


4. compNum을 메서드를 다음과 같이 바꾸면
public static int compNum() --> static int compNum()

 


[실습 16] 접근 제한자 용도


1. MyJavaExam2_5에서


MyJavaExam2_3.n1 = 10;
MyJavaExam2_3.n2 = 20;
int res = MyJavaExam2_3.compNum();
MyJavaExam2_3.printResult(res);


2. n1 멤버 변수를 다음과 같이 바꾸면?
static int n1;  --> protected static int n1;


3. compNum을 메서드를 다음과 같이 바꾸면
static int compNum() --> protected static int compNum()
==============================================


* Exception 처리 방법
1) try - catch
2) 메소드에서 throws Exception


[실습17] Exception 처리방법: MyJavaExam2_6 클래스
1. stringToInteger1 함수 선언 (아무 처리 안함)
private int stringToInteger1(String p) {
       int res;
       res = Integer.parseInt(p);
       return res;
}
2. stringToInteger2 함수 선언 (try-catch 처리)
private int stringToInteger2(String p) {
       int res=0;
       try {
            res = Integer.parseInt(p);
       } catch (NumberFormatException e) {
            System.out.println("숫자가 아닌 값 입력");
       }
       return res;
}
3. stringToInteger3 함수 선언 (메소드정의를 throws Exception형태로)
private int stringToInteger3 (String p) throws NumberFormatException {
       int res;
       res = Integer.parseInt(p);
       return res;
}


4. main에서 MyJavaExam2_6사용 (인위적 예외 발생)
MyJavaExam2_6 me = new MyJavaExam2_6();
me.stringToInteger1("X");  //  case 1
me.stringToInteger2("X");  // case 2
try {
      me.stringToInteger3("X");  // case 3
} catch (NumberFormatException e) {
 System.out.println("stringToInteger3 에러");
}
[실습 17] 클래스 상속 - 1
1. BasicMember 클래스 작성 -- com.member (패키지)
2. 멤버변수 추가
private String _name;
private int _id;


3. 생성자 함수 추가 - 1
public BasicMember(String p1) {
      this._name = p1;
}


4. 생성자 함수 추가 - 2
public BasicMember(String p1, int p2) {
       this(p1);// 또는 this._name = p1;
       this._id = p2;    
}


5. 생성자 함수 추가 - 3
public BasicMember() {
       this("", 0);
}


6. 메소드 추가
public void printMember() {
     System.out.println("이름: " + _name + " 아이디: " + _id);
}


[실습 18] 클래스 상속 - 단계 2


1. MemberTest 클래스 작성 - 디폴트패키지에


2. BasicMember 사용 설정 MemberTest클래스 선언문 위에
import com.member.BasicMember; 
public class MemberTest {
}


3. MemberTest 에 main 함수


public static void main(String[] args) {
    BasicMember bm1 = new BasicMember();
    bm1.printMember();
    BasicMember bm2 = new BasicMember("okgosu");
    bm2.printMember();
    BasicMember bm3 = new BasicMember("java", 999);
    bm3.printMember();
}


[실습 19] 클래스 상속 - 3단계


1. com.memebr 패키지에 ExtendedMember 클래스 선언, BasicMemebr를 상속(확장)


public class ExtendedMemebr  extends BasicMember {
}


2. 추가할 멤버 변수 정의
private String _addr;
private boolean _married;


3. 생성자 함수 정의
public  ExtendedMemebr (String p1, int p2, String p3, boolean p4) {
      super(p_name, p_id);
      this._addr = p3;
      this._married = p4;    
}


4. printMember 오버라이딩
public void printMember() {
   super.printMember();
   // 부모클래스 내용 호출  System.out.println("이름: " + _name + " 아이디: " + _id);
   System.out.println("추가정보: 주소:" + _addr  + " 결혼여부: " + _married);
}


5. MemberTest에서 사용 (main)


[객체타입 판별 연산자] instanceof
a instanceof Object
--> a는 Object 의 자식 클래스다 (a는 Object 타입이다.)


System.out.println(bm1 instanceof Object); // true
System.out.println(bm1 instanceof BasicMember); // true
System.out.println(bm1 instanceof ExtendedMember); // false


System.out.println(em1 instanceof Object); // true
System.out.println(em1 instanceof BasicMember); // true ExtendedMember는 BasicMember의 자식이다
System.out.println(em1 instanceof ExtendedMember); // true

 


[실습 20] 클래스 상속 - 4단계


1. 클래스 작성 : MemberManager


2. import 문 추가
1) 방법 1: 클래스 직접지정
import com.member.BasicMember;
import com.member.ExtendedMember;


2) 방법 2: 패키지만 지정
import com.member.*;


3) import java.util.ArrayList;


3. 회원객체를 저장하는 멤버 변수 정의
private ArrayList al = new ArrayList();


4. 회원을 추가하는 함수 정의 (ArrayList)


private void addMember(BasicMember m) {
 System.out.println("addMember:BasicMember 호출");
 al.add(m);
}


5. printMemberList 함수 정의


private void printMemberList() {
 for(int i=0; i  Object obj  = al.get(i);
  if(obj instanceof ExtendedMember) {
    System.out.println("##### ExtendedMember ####");
    ExtendedMember m = (ExtendedMember)al.get(i);
    m.printMember();
  } else  if(obj instanceof BasicMember) {
   System.out.println("##### BasicMember ####");
   BasicMember m = (BasicMember)al.get(i);
   m.printMember();
  }
 }
}


6. main 함수 정의


BasicMember bm1 = new BasicMember("java1",1);
BasicMember bm2 = new BasicMember("java2",2);
BasicMember bm3 = new BasicMember("java3",3);
BasicMember em1 = new ExtendedMember("홍길동", 100, "서울", true);
BasicMember em2 = new ExtendedMember("홍길동", 111, "부모", true);
MemberManager mm = new MemberManager();
mm.addMember(bm1);
mm.addMember(bm2);
mm.addMember(bm3);  
mm.addMember(em1);
mm.printMemberList();


* 클래스 상속
- extends할 수 있는 클래스는 1개만 지정 가능
- 여러 개 클래스의 속성이나 메소드를 사용하려면 interface를 이용함

 


[실습 21] 인터페이스 작성 - 1단계


1. MemberPrintable 작성


package com.member;


public interface MemberPrintable {
 public void printMemberList();
 public int getMemberCount();
}


2. 인터페이스를 구현하는 클래스 작성


public class MemberPrintableImpl implements MemberPrintable

 


3. 인터페이스를 사용하는 테스트 작성 : MemberTest2

 

 


* Collection API 사용하기
1) List 타입 지정
private ArrayList al = new ArrayList();


2) Iterator를 활용한 List 타입값 추출

 


Iterator itr = al.iterator();
while (itr.hasNext()) {
    BasicMember bm = itr.next();
    bm.printMember();
}


[추상클래스] - Member
1. 설계
* 클래스의 공통속성, 공통 함수를 생각
* 자식 클래스에서 차별화되는 속성, 함수를 따로 추가


* 회원 속성 : 아이디, 이름
* 회원 함수 : 회원가입, 회원탈퇴, 회원정보출력


*구현은 안하고, 설계사상에 반영된 속성과 함수정의만 있음


2. 구현
어떤 회원이 있는가? 일반 회원, 특별 회원


- 일반회원?  --> GeneralMember
- 특별회원? --> 포인트, 포인트확인 --> VIPMember


1) GeneralMember : Member클래스를 extends 하여 정의
2) VIPMember : Member클래스를 extends 하여 정의
--> 속성: private int _point;
--> 함수:
private int getPoint() {
      return _point;
}    

 

 


* 과제: 다음과 같은 클래스를 정의하시오.
1. GuestMember 클래스 정의
1) Member 클래스를 extends


2. BuyMember 클래스 정의 (구매경험이 있는 게스트 멤버)
1) GuestMember 클래스를 extends 하고  2) MemberPrintable 인터페이스를 implements함


3. PowerMember클래스 정의
1) GeneralMember 클래스를 extends 하고 2) MemberPrintable 인터페이스를 implements함


4. SuperMember클래스 정의
1) VIPMember 클래스를 extends 하고 2) MemberPrintable 인터페이스를 implements함
=================================


* 날짜 출력
1. 클래스 : MyDate


2. 클래스 import
import java.text.SimpleDateFormat;
import java.util.Date;


3. main함수: 날짜 객체 생성 및 출력
Date dt = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat();
String str = dateFormat.format(dt.getTime());
System.out.println(str);  


SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy년 MM월 dd 일 aa hh시 mm분 ss초");


* 특정 파일 Read/Write
1. 클래스 : MyFileManager
2. 클래스 import
import java.io.*;


3. main함수:
// 파일 내용 저장
PrintWriter writer = null;
try {
 writer = new PrintWriter("output.txt");
 writer.println("반갑습니다.");
 writer.println("Java");
 writer.println("Android");
 writer.close();
} catch (Exception e) {
 e.printStackTrace();

// 파일 내용 출력 
FileInputStream in = null;
try {
 in = new FileInputStream("output.txt");
 InputStreamReader is = new InputStreamReader(in);
 BufferedReader  br = new BufferedReader (is);
 String line = null;
 while((line=br.readLine())!=null){
       System.out.println(line);
 }
} catch (Exception e) {
 e.printStackTrace();
}

 


 : 예제 10-3
* 디렉토리 목록 : 예제 10-16


[인스턴스 생성방법 2가지]


1. 인스턴스 생성 방법 - 1 (참조변수가 명시) --> bm1을 나중에 참조
MemberManager mm = new MemberManager();
BasicMember bm1 = new BasicMember("java1", 1);
mm.addMember(bm1);


2. 인스턴스 생성 방법 - 2 (참조변수명은 없음)
MemberManager mm = new MemberManager();
mm.addMember(new BasicMember("java1", 1));


파일 출력 예)


1번 방법)
FileInputStream in = new FileInputStream("output.txt");
InputStreamReader is = new InputStreamReader(in);
BufferedReader br1 = new BufferedReader(is);


2번 방법)
BufferedReader br2
= new BufferedReader(new InputStreamReader(new FileInputStream("output.txt"))); 

 

 

 

 

 

 

 

 

 

 


[종합실습] 상속과 인터페이스

 


* 시계
1) 공통점 Clock
- 시간을 표시 time
- 시간을 설정한다 setTime
- 시간을 표시한다 displayTime


2) 차이점 (종류별)
- 알람 기능


- 아나로그/디지털
- 스탑워치
- 조명 기능
- 방수점
- 시계줄
- 금속/플라스틱
- 배터리가 있다
- 제조사가 있다


3) 클래스명: MyWatch extends Clock
 조명기능 : light  ---> boolean
 조명을 켜고 끈다. : setLight


4) MyWatch 에서
displayTime을 메소드 오버로딩해서 시간출력이 다음과 같은 양식으로 나오게 하세요.


[이름]시간 표시


확인 : ClockTest에서

 


==========================================================


[안드로이드 개발환경 설정-1단계] - SDK, 라이브러리 다운로드
1. android-sdk_r08-windows.zip --> 압축해제 (c:\java\android-sdk-windows)
2. 이클립스를 실행한 상태에서 c:\java\android-sdk-windows\SDK Manager.exe 실행
3. Available Packages 에서
[필수]
1) SDK Platform Android 2.1-update1, API 7, revision 2 (안드로이드 2.1 라이브러리)
2) Android SDK Tools, revision 8 (안드로이드 2.1 개발 SDK)
3) Android SDK Platform-Tools, revision 1 (안드로이드 2.1 개발 SDK)
4) Google APIs by Google Inc., Android API 7, revision 1 (안드로이드 2.1 라이브러리-구글맵포함)
[선택]
5) Samples for SDK API 7, revision 1 (안드로이드 2.1 샘플)
6) Documentation for Android SDK, API 9, revision 1 (안드로이드 2.1 문서)


4. 윈도우 환경변수 PATH에 안드로이드 SDK/platform-tools 경로 추가
C:\Program Files\Java\jdk1.6.0_13\bin;C:\java\android-sdk-windows\platform-tools;

 

 


[안드로이드 개발환경 설정-2단계] - 안드로이드 이클립스 플러그인 설치(ADT)
1. 이클립스 - Help - Install New Software
: https://dl-ssl.google.com/android/eclipse/


2. ADT 구성요소들 설치


3. 이클립스 환경설정에 안드로이드 SDK 경로 설정
C:\java\android-sdk-windows


[안드로이드폰 기능]


1. 4대 버튼 기능이 무엇인지?


2. 에뮬레이터
1) 한글설정 하기
2) 시간대설정 하기


3. 안드로이드 앱 설치 방법
1) 구글 마켓 (폰에서) --> 에뮬레이터에는 없음
2) 국내 통신사 마켓(T스토어, Show앱스토어, LG오즈스토어?)
3) *.apk 파일을 폰에 다운로드
4) 이클립스에서 소스코드를 빌드해서 인스톨
5) 안드로이드 SDK의 adb 명령어 사용
     예)  adb install HangulKeyboard.apk


4. 안드로이드폰 기능 탐색
1) 연락처 등록하기 - 3건 이상
2) 전화 걸고 끊어 보기
3) 사진 찍어서 갤러리에서 확인하기 - 2건 이상
4) 시스템 알림메시지 열어보고 닫기
5) 폰 회전 --> Ctrl + F11


5. DDMS
1) File Explorer: mp3를 넣어서 들어보기
2) Emulator Control
- 전화 온 상황 연출
- 문자 보내기
3) LogCat 메시지 보기

 


* 안드로이드 빌드 과정


1) 안드로이드 프로젝트 생성
2) 소스 코딩 ---> *.java, *.xml
3) 빌드 (저장하면 자동으로 하도록 세팅됨) : *.java --> *.class --> *.dex --> *.apk
4) 실행 : *.apk 가 에뮬레이터 또는 폰에 install
--> 수동인스톨: adb install *.apk
[실습1]


1. 레이아웃 작성 - my_app.xml


2. 레이아웃에 EditText, Button을 추가
- EditText의 id는 ed_msg
- Button의 id는 btn_click


- EditText의 text는 "입력하세요"
- Button의 text는 "클릭하세요"


3. 액티비티 작성 - MyApp.java  (extends Activity)


4. onCreate 함수 오버라이딩


5. setContentView함수 호출


6. Button과 EditText 변수 선언 및 findViewByID호출
Button btn = (Button)findViewByID(R.id.btn_click);
EditText ????

 


[실습2]


1. my_app.xml에 EditText를 하나 더 추가하고


2. 버튼을 클릭하면 두 EditText에 들어있는 숫자의 합을 Toast로 출력함


String msg = ed.getText().toString();
int num1 = Integer.parseInt(msg);

 


[실습3]


1. 레이아웃 작성 - my_date.xml


2. 레이아웃에 Button을 추가
- Button의 id는 btn_date
- Button의 text는 "현재시간확인"


3. 액티비티 작성 - MyDate extends Activity


4. onCreate 함수 오버라이딩


5. setContentView함수 호출


6. Button을 클릭하면  Toast로 현재 시각을 출력함
1) import 문 추가
    import java.text.SimpleDateFormat;
    import java.util.Date;
2) 날짜
  Date dt = new Date();
  SimpleDateFormat dateFormat = new SimpleDateFormat();
  String str = dateFormat.format(dt.getTime());


7. AndroidManifest.xml의 activity의 name 값 수정


     activity android:name="MyDate"


[실습4]


1. 레이아웃 작성 - my_image.xml


2. 레이아웃에 ImageView를 추가 후 속성을 다음과 같이 지정
- android:id="@+id/img2"
- android:src="@drawable/icon"


3. 액티비티 작성 - MyImage extends Activity


4. onCreate 함수 오버라이딩


5. setContentView함수 호출


6. Image를 클릭하면  경고창 생성


new AlertDialog.Builder(MyImage.this)
.setTitle("선택상자")
.setMessage("반갑습니다")
.setNeutralButton("닫기", null)
.show();


* import 문: import android.app.AlertDialog;


7. AndroidManifest.xml의 activity의 name 값 수정


     activity android:name="MyImage"

 

 


[실습5]


1. MyEditText.java를 수정
1) OK버튼을 누르면 입력한 글자로 검색을 실행하게 한다.
     Intent intent = new Intent(Intent.ACTION_SEARCH);
     intent.putExtra(SearchManager.QUERY, 에디트텍스트에 입력된 값);
     startActivity(intent);


2) CANCEL 버튼을 누르면 에디트 텍스트에 입력된 글자를 지운다.
     ed.setText("");


2.MyImageView.java 수정
: 이미지 버튼을 눌러 배경 설정하기 전에 AlertDialog로 다음과 같은 메시지를 띄운다.
"현재 이미지를 배경화면으로 설정합니다"


new AlertDialog.Builder(MyImageView.this)
.setTitle("알림")
.setMessage("현재 이미지를 배경화면으로 설정합니다")
.setNeutralButton("확인", new DialogInterface.OnClickListener() {
 @Override
 public void onClick(DialogInterface dialog, int which) {
                      // 여기에 iv.setDrawingCacheEnabled(true); 부터 try ~ catch 부분 카피  
 }
})
.show();  

 


3. MyScrollView 수정
:createWidgets함수에 ImageView를 동적으로 생성해서 같이 추가되도록 한다.
ImageView img = new ImageView(this);
img.setImageResource(R.drawable.zzangu0);


[실습]
1. MySpinner 수정


1) items 변수를 다음과 같이 수정
String[] items = {"http://okgosu.net", "http://d.android.com", "http://daum.net"};


2) 스피너의 아이템을 선택했을 때 선택한 주소의 웹사이트로 이동
     String site = s1.getSelectedItem().toString();
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(site));
     startActivity(intent);

 

[실습]
* 컨텍스트 메뉴가 선택되면 action명이 "android.intent.action.MAIN"인 액티비티를 호출
   (onContextItemSelected)
   
    startActivity(new Intent("android.intent.action.MAIN"));

* 옵션메뉴가 선택되면 MyWebView를 명시적으로 호출 (onOptionsItemSelected)

   startActivity(new Intent(this,MyWebView.class));


[실습]
1) 버튼 9번을 누르면  다음과 같은 조건으로 인텐트를 발생시킨다.

액션 = "kcdi.Android"
카테고리 ="android.intent.category.DEFAULT"
MIME타입은 = "video/avi"

* 코드
intent = new Intent("kcdi.Android");
intent.setType("video/avi");
startActivity(intent);

2) MyTextStyle 액티비티에 대해 1)의 조건으로 인텐트가 호출되도록 인텐트 필터를 구성한다.

<intent-filter>
   <action android:name="kcdi.Android" />
   <category android:name="android.intent.category.DEFAULT" />
   <data android:mimeType="video/avi"/>
</intent-filter>  


[홈화면을 MyWebView로 바꾸기] : HOME키를 누르면 실행되는 기본 액티비티

: MyWebView에 다음과 같이 인텐트 필터를 추가한다.

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.HOME" />
   <category android:name="android.intent.category.DEFAULT" />
</intent-filter>  


[과제]
1. my_intent_caller.xml 에 Spinner 추가


2. Spinner(id는 spn) 에서 다음의 데이터를 표시하도록 함
String[] items = {"book", "shop", "movie" };


3. MyIntentCaller에서 "인텐트호출"버튼을 누르면
Spinner의 선택값을 "mychoice"라는 이름으로 MyIntentReceiver로 전송

intent.putExtra("mychoice", spn.getSelectedItem().toString());


4. MyIntentReceiver에서 수신한 항목을 Toast로 표시

[과제]
1. my_xml_pref_view.xml에 라디오그룹과 라디오 버튼 추가

1) RadioGroup 추가 (id: rdg)
2) 추가한 RadioGroup안에 RadioButton 3개 추가
- id는 각기 rb1, rb2, rb3
- text는 각기 Red, Green, Blue

2. MyXMLPrefView.java에서 라디오버튼을 클릭하면

1) 배경화면의 색상을 바로 변경
mylayout.setBackgroundColor(Color.RED); // RED 라디오 버튼의 경우

2) 각각의 케이스별로 RGB값을 환경설정에 저장
editor.putString("my_pref_list", "#FFFF0000"); // Red

* 참고
Green "#FF00FF00"
Blue "#FF0000FF"

[SD카드로 읽고 쓰기] MyReadBin.java 수정

1. 권한 추가 (AndroidManifest.xml)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2. onResume함수 수정
    File f = new File("/sdcard/okgosu.txt");
    InputStream in = new FileInputStream(f);

3. onPause함수 수정
   File f = new File("/sdcard/okgosu.txt");
   if(!f.exists()) f.createNewFile();
   OutputStream os = new FileOutputStream(f);
   OutputStreamWriter out = new OutputStreamWriter(os);

------------------------------------------------
상품조회 테이블 (prod)
-----------------------------------------
아이디    상품코드         상품명
_id         prod_code     prod_name
1            snk01             새우깡
2            snk02             맛동산
......

[실습]
MyProdDBList.java의 데이터 정렬 순서를 상품이름이 아니라 상품 아이디 순으로 변경

onResume함수에서 다음과 같이 수정
1) 변경전
String order_by = MyProdDBCons.PROD_NAME;
2) 변경후
String order_by = MyProdDBCons.PROD_ID;

 

1) FromActivity: startActivityForResult(new Intent());

2) ToActivity: setResult()

3) FromActivity: onActivityResult()

=============================================
상품 관리자 화면 로직

1. 상품검색 인텐트 MyProdDBManager --> MyProdDBList
1) act : MyProdDBList
2) cat : DEFAULT
3) type: 없음

2. 상품입력화면 인텐트 MyProdDBManager --> MyProdDBInsert
1) act : MyProdDBInsert
2) cat : DEFAULT
3) type: 없음

3. 상품 입력처리 인텐트 MyProdDBInsert --> MyProdDBManger
1) act: Intent.ACTION_INSERT
2) cat: DEFAULT
3) type: vnd.android.cursor.dir/vnd.okgosu.net.MyProd

4. 상품선택 인텐트 MyProdDBList --> MyProdDBItem
1) act: Intent.ACTION_PICK
2) cat: DEFAULT
3) type: vnd.android.cursor.dir/vnd.okgosu.net.MyProd

5. 상품 삭제 버튼 인텐트
1) act: Intent.ACTION_DELETE
2) cat: DEFAULT
3) type: vnd.android.cursor.dir/vnd.okgosu.net.MyProd

6. 상품 수정 버튼 인텐트
1) act: Intent.ACTION_EDIT
2) cat: DEFAULT
3) type: vnd.android.cursor.dir/vnd.okgosu.net.MyProd

[구글맵키 받기]

D4:0D:30:8C:76:D5:9A:FE:B4:39:38:AE:FB:E6:93:C0

03XqKyy9AD22vc9mLt1TAlzo5PYgU3M6uJPu72w

[설치된 애플리케이션 목록 조회]

1. MyAppList (ListActivity 생성)


2. onCreate 앱리스트 뽑아오기
List appList = getPackageManager().getInstalledApplications(0);
// 어댑터에 사용할 배열
ArrayList<String> items = new ArrayList<String>();
Iterator<ApplicationInfo> itr = appList.iterator();
while (itr.hasNext()) {
 ApplicationInfo info = itr.next();
 items.add(info.packageName);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
setListAdapter(adapter);

// 실행중 액티비티 목록
  ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
  List info = am.getRunningTasks(7);

 

 

 

 

 

 


5. 앱리스트를 클릭하면 AlertDialog로 클래스명 출력
ApplicationInfo app = appList.get(position);
String cname = app.packageName;

 

 

kcdi20110107.zip
android_20110107.txt

 

 

profile