반응형

http://techviral.com/best-android-hacking-apps/

 

http://www.talktohacker.com/2015/07/best-android-hacking-apps.html

반응형
반응형

출처: http://egloos.zum.com/penta82/v/4099869

 

 

 

JCF(Java Collection Framework)에서 많이 사용되었던 Hashtable에 대해서 살펴보자.

Hashtable은 JDK 1.2이전부터 존재해 왔던 클래스이다. 많은 사람들이 의문인 것은 왜 HashTable이 아니냐는 것인데 여기서는 그냥 넘어가자. 클래스명이야 소스 개발자의 몫이니까.

Hashtable의 중요 메소드를 살펴보면,

  • void clear()
    • 모든 키와 값을 제거한다.
  • boolean contains(Object value), containsValue(Object value)
    • 주어진 객체에 대응하는 키 값이 있는지 알려준다.
  • boolean containsKey(Object key)
    • 주어진 키 값이 있는지 알려준다.
  • Enumeration keys()
    • 해시 테이블의 키 값들을 돌려준다.
  • Enumeration elements()
    • 해시 테이블에 저장된 객체들을 돌려준다.
  • Object get(Object key)
    • 주어진 키에 대응하는 값을 돌려준다.
  • Object put(Object key, Object value)
    • 키와 대응하는 값을 저장한다.
  • Object remove(Object key)
    • 키의 대응 관계(Mapping)을 제거한다.
  • int size()
    • 해시 테이블의 대응 관계(Mapping)의 개수를 돌려준다.

여기서 'Enumeration이 무엇인가?' 하는 궁금증이 있을 것이다. Enumeration은 단순히 객체들의 목록을 가지고 있는 구조체라고 생각하면 된다. Enumeration클래스의 메소드를 보면

  • boolean hasMoreElements()
    • 더 이상의 요소가 있는지 알려준다.
  • nextElements()
    • 다음 요소를 돌려준다. 만약 없다면, NoSuchElementException 예외를 발생한다.

따라서 위의 두 메소드를 사용하면 for문, while문을 이용하지 않고도 key값과 element값에 접근할 수 있다.

이제 관련 소스를 살펴보자.

public class HashtableExam2 {
   
    public static void main(String[] args) {
        Hashtable htable = new Hashtable(10);
       
        // put(Object key, Object value)메소드
        htable.put("java", "프로그래밍 언어");
        htable.put("bible", "성서, 성경, 성전");
        htable.put("star", "별, 항성");
        htable.put("moon", "달");
       
        // contains(Object value);
        if(htable.contains("프로그래밍 언어")) {
            System.out.println("value : \"프로그래밍 언어\" 존재");
        }else{
            System.out.println("value : \"프로그래밍 언어\" 존재하지 않음");
        }   
       
        if(htable.contains("음악")) {
            System.out.println("value : \"음악\" 존재");
        }else{
            System.out.println("value : \"음악\" 존재하지 않음");
        }
       
        // containsValue(Object value)
        if(htable.containsValue("프로그래밍 언어")) {
            System.out.println("value : \"프로그래밍 언어\" 존재");
        }else{
            System.out.println("value : \"프로그래밍 언어\" 존재하지 않음");
        }
       
        if(htable.containsValue("음악")) {
            System.out.println("value : \"음악\" 존재");
        }else{
            System.out.println("value : \"음악\" 존재하지 않음");
        }
       
        // containsKey(Object key)
        if(htable.containsKey("java")) {
            System.out.println("key : \"java\" 존재");
        }else{
            System.out.println("key : \"java\" 존재하지 않음");
        }
       
        if(htable.containsValue("ruby")) {
            System.out.println("key : \"ruby\" 존재");
        }else{
            System.out.println("key : \"ruby\" 존재하지 않음");
        }
       
        // get(Object key)
        String value = (String)htable.get("java");
        System.out.println("java(key) : " + value + "(value)");
       
        // remove(Object key)
        htable.remove("star");
       
        // Enumeration 사용
        Enumeration e = htable.keys();
        String key, val;
        while(e.hasMoreElements()) {
            key = (String)e.nextElement();
            val = (String)htable.get(key);
            System.out.println("[" + key + "] " + val);
        }
       
        // clear()
        htable.clear();
       
        // size()
        System.out.println("htable의 size : " + htable.size());
    }

}

 

반응형
반응형

출처:http://arabiannight.tistory.com/entry/368

 

 

 

안드로이드에서는 DB에서 가져온 데이터를 쉽게 처리하기 위해서 Cursor 라는 인터페이스를 제공해 줍니다. Cursor는 기본적으로 DB에서 값을 가져와서 마치 실제 Table의 한 행(Row), 한 행(Row) 을 참조하는 것 처럼 사용 할 수 있게 해 줍니다. 개발자는 마치 그 행(Row) 을 가지고 행(Row)에 있는 데이터를 가져다가 쓰는 것 처럼 사용하면 되는 편의성을 제공받게 됩니다.


1) 기본적인 DB 필드 구조.



 

Cursor는 SQLiteDatabase 에서 얻어오 실제 DB 값을 가지고 마치 테이블의 행(Row)를 하나하나 이동하며 참조하는듯 Data를 처리해 줍니다. 실제 Cursor의 동작은 이렇게 동작한다고 생각하시면 됩니다.


2) Cursor의 동작 원리 : 행(Row) 참조



실제 Cursor가 행(Row)를 참조하기 때문에 Cursor의 위치를 바꿔주는 메서드들이 존재 합니다. 실제 자주 사용하는 메서드들 입니다.


 메서드 

 동작 

 Cursor.moveToFirst();

 Cursor를 제일 첫번째 행(Row)으로 이동 시킨다.

 Cursor.moveToNext();

 Cursor를 다음 행(Row)으로 이동 시킨다.

 Cursor.moveToPrevious();

 Cursor를 이전 행(Row)으로 이동 시킨다.
 Cursor.moveToPosition(position);

 Cursor를 해당 Position 행(Row)으로 이동 시킨다.

 Cursor.moveToLast();

 Cursor를 마지막 행(Row)으로 이동 시킨다.

 



2-1) Cursor의 동작 원리 : 행(Row) 이동



위에서 실제 Cursor의 동작 원리를 살펴 보았는데요. 이번에는 Cursor가 참조하고 있는 DB 테이블의 행(Row) Data를 얻어오는 방법에 대해 알아 보겠습니다.



 

 메서드 

 동작 

 Cursor.getInt(), Cursor.getString(),   Cursor.getLong(), Cursor.getBoolean().....

 DB 테이블의 실제 Data를 가지고 옵니다.

 Cursor.getColumnIndex(Streing columnName);

 DB 테이블의 해당 필드(컬럼) 이름을 얻어 옵니다.

 Cursor.getPosition();

 Cursor가 가리키고 있는 DB 테이블 행(Row) Position 을 얻어 옵니다.

 Cursor.getColumnName(int columnIndex);

 필드(컬럼) index의 해당하는 필드(컬럼) 이름을 얻어 옵니다.

 Cursor.getCount();

 커서가 참조 할 수 있는 해당 테이블의 행(Row)의 갯수를 얻어 옵니다.

 Cursor.getColumnNames();

 DB 테이블의 필드(컬럼) 명을 순서대로 배열로 얻어 옵니다.

 Cursor.getColumnCount();

 DB 테이블의 필드(컬럼) 갯수를 얻어 옵니다.

 

 



3) Cursor로 값 가져오기

포스팅에서 언급하는 필드와 컬럼은 같은 개념으로 보시면 됩니다.


3-1) Cursor.getInt(), Cursor.getString(),   Cursor.getLong(), Cursor.getBoolean().....



3-2) Cursor.getColumnIndex(Streing columnName);



3-3) Cursor.getPosition();



3-4) Cursor.getColumnName(int columnIndex);



3-5) Cursor.getCount();



3-6) Cursor.getColumnNames();



3-7) Cursor.getColumnCount();




이렇게 해서 Cursor의 실제 동작 방법에 대해 알아 보았는데요. 어떠신가요?ㅎㅎ 이해가 잘 되시나요? 저는 그림 편집하느라 좀 시간이 걸렸네요. ^^; ㅎㅎ 아무튼 열심히 봐주셔서 감사하고 다음번 포스팅에서는 실제 Cursor의 사용법에 대해 알아보는 시간을 가져 보겠습니다. 



감사합니다.

반응형
반응형

출처: http://4eda.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%B0%B0%EA%B2%BD%ED%99%94%EB%A9%B4-%EB%B2%84%ED%8A%BC-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B3%80%EA%B2%BD-LinearLayout

 

기본화면입니다.

 


버튼설정은 앞선강의(액티비티간 전환)를 참조하세요.

 

1. 버튼이미지 삽입

 


<Button
 android:id="@+id/bgchange1"
 android:layout_width="fill_parent"
 android:layout_height="40px"
 android:text="@string/str_bg1"
 android:background="@color/red"
 />


 

1) main.xml에서 버튼의 배경을 설정합니다.




2) res -> values -> colors.xml파일을 생성합니다. 

 


 

<?xml version="1.0" encoding="UTF-8"?>
< resources>
  <color name="red">#ffff0000</color>
  <color name="blue">#ff0000ff</color>
< /resources>



2. 배경화면이미지 삽입

 


1) main.xml 파일에 LinearLayout id를 정의합니다.

 


2) 원하는 이미지 파일을 드래그하여 drawable-hdpi 폴더로 옮겨줍니다.

 

위와 같은 창이 뜨면 OK를 선택합니다.

 


폴더 안에 이미지파일이 들어간 것을 볼 수 있습니다.

 


 

public class Layout extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
    Button button1;
    Button button2;
    LinearLayout layout;
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        button1 = (Button)findViewById(R.id.bgchange1);
        button2 = (Button)findViewById(R.id.bgchange2);
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
        layout=(LinearLayout)findViewById(R.id.layout);
    }
 @Override
 public void onClick(View v){
  if(v.getId()==R.id.bgchange1){
   layout.setBackgroundResource(R.drawable.rose);
  }
  else if(v.getId()==R.id.bgchange2){
   layout.setBackgroundResource(R.drawable.cloud);
  }
 }
}


3) Layout.java 파일을 작성합니다.

Main.xml화면에 정의된 layout를 사용하여 버튼이벤트로 저장된 이미지로 배경화면이 변환되도록 합니다.


3. 결과

 

 


 

버튼을 클릭할 때마다 배경화면이 변하는 것을 확인할 수 있습니다.

반응형

+ Recent posts