'프로그래밍/안드로이드'에 해당되는 글 3건

  1. 2014.07.24 [Android]SQLite 기본 명령어 정리
  2. 2014.07.16 Android Toast duration 조정하기
  3. 2014.07.15 4.4 킷캣 에뮬레이터에서 한글 보이기
728x90

데이터베이스 리스트 조회

ContextWrapper.databaseList();

ContextWrapper == ConText

 

데이터베이스 삭제

ContextWrapper.deleteDatabase("삭제할 데이터베이스명");

 

예)

if (Arrays.binarySearch(databaseList(), DATABASE_NAME) >= 0) {

   deleteDatabase(DATABASE_NAME);

}

 

어플리케이션내에 데이터베이스 열거나 생성

ContextWrapper.openOrCreateDatabase("데이터베이스명.db", 데이터베이스모드<읽기,쓰기전용 또는 기존에 파일있으면 열어라등.. 모드지정>, 쿼리가호출되는 커서를 선택<커서객체를 만들어 사용할지에입력 그렇지 않으면 null>);

 

예) SQLiteDatabase mydb=openOrCreateDatabase(DATABASE_NAME, SQLiteDatabase.CREATE_IF_NECESSARY, null);  조회해보고 없으면 생성해주는 상수값

 

 

데이터베이스 위치 설정

SQLiteDatabase.setLocale(Locale.getDefault()); 

 

데이터베이스 접근권한 설정

SQLiteDatabase.setLockingEnabled(true); 

 

데이터베이스 버전 설정

SQLiteDatabase.setVersion(1);

 

 

데이터베이스 위치 추출

SQLiteDatabase.getPath());

 

데이터베이스 버전

SQLiteDatabase.getVersion();

 

현재 데이터베이스  페이지사이즈

SQLiteDatabase.getPageSize();

 

데이터베이스의 최대크기

SQLiteDatabase.getMaximumSize();

 

데이터베이스가 열려 있는지

SQLiteDatabase.isOpen();

 

 

데이터베이스가 읽기 전용 인지

SQLiteDatabase.isReadOnly();

 

현재 쓰레드에 의해 데이터베이스가 잠겨 있는지

SQLiteDatabase.isDbLockedByCurrentThread();

 

 

쿼리문 실행메서드

SQLiteDatabase.execSQL("쿼리문");

예)

SQLiteDatabase.execSQL("CREATE TABLE tbl_authors (id INTEGER PRIMARY KEY AUTOINCREMENT , firstname TEXT, lastname TEXT);");

 

 

테이블에 데이터를 삽입할 경우

ContentValues values = new ContentValues();

ContentValues.put("필드명", 데이터);       (어디에 필드명)과 ( 데이터) 한묶음으로

//long id = SQLiteDatabase.insert(테이블명, null, ContentValues);

long id  = SQLiteDatabase.insertOrThrow(테이블명, null, ContentValues);

* 두번째 인자에 null을 사용하는 이유 : 완전히 비어있는 행을 허용하지 않기 때문에 세번재 인자값이 null인 경우를 방지

 

예)

ContentValues values = new ContentValues();

values.put("title", newBook.mTitle); => values.put("title", "해리");

values.put("dateadded", newBook.mDateAdded.toLocaleString()); =>values.put("dateadded", "2011-06-23")

values.put("authorid", newBook.mAuthor.mAuthorId);

//long id = SQLiteDatabase.insert(TABLE_BOOK, null, values);

long id  = SQLiteDatabase.insertOrThrow(TABLE_BOOK, null, values); 필요에따라 

SQLiteDatabase.insertOrThrow(TABLE_BOOK, null, values);

 

 

테이블에 데이터를 수정할 경우

ContentValues values = new ContentValues();

ContentValues.put("필드명", 데이터);

SQLiteDatabase.update(테이블명, ContentValues, "조건필드=?", ?를 치환할 문자배열);

 

예)

ContentValues values = new ContentValues();

ContentValues.put("필드명", 데이터);

SQLiteDatabase.update(TABLE_BOOK, values, "id=?", new String[] { bookId.toString() });

 

 

테이블에 데이터를 삭제할 경우

SQLiteDatabase.delete(테이블명, "조건필드=?", ?를 치환할 문자배열);

 

예)

SQLiteDatabase.delete(TABLE_BOOK, "id=?", new String[] { bookId.toString() });

 

 

테이블에 데이터를 조회할 경우

Cursor c = mDatabase.query(테이블명, null, null, null, null, null, null);    select

 

Cursor.getCount(); 조회된 recode의 총갯수

Cursor.getColumnCount(); 조회된 필드 갯수

Cursor.getColumnName(); 이름

Cursor.getPosition(); 현재 커서 포인터위치

Cursor.getString(int columnIndex); 필드값

 

 

커서포인트 위치를 바꿔주는 메서드 처음 (Cursor 위치는 항상 0번 이기에 First를 해줘야함)

Cursor.moveToFirst(); 커서포인터위치를 첫번째 레코드 위치로

Cursor.moveToNext(); 커서포인터위치를 다음 레코드 위치로

Cursor.moveToPrevious();  커서포인터위치를 이전 레코드 위치로

Cursor.moveToLast(); 커서포인터위치를 마지막 레코드위치로

Cursor.moveToPosition(int position); 커서포인터위치를 지정한 레코드 위치로

Cursor.isAfterLast(); 현재 커서포인터위치에서 다음레코드가 있는지 확인  //, 마지막레코드인지 확인 //마지막 레코드이면 true

recode, id값은 무관...

  

public void LogCursorInfo(Cursor c) {

  Log.i(DEBUG_TAG, "*** Cursor Begin *** " + " Results:" + c.getCount() + " Columns: " + c.getColumnCount());

 

  // Print column names

  String rowHeaders = "|| ";

  for (int i = 0; i < c.getColumnCount(); i++) {

     rowHeaders = rowHeaders.concat(c.getColumnName(i) + " || ");

  }

  Log.i(DEBUG_TAG, "COLUMNS " + rowHeaders);

 

  // Print records

  c.moveToFirst();

  while (c.isAfterLast() == false) {

     String rowResults = "|| ";

     for (int i = 0; i < c.getColumnCount(); i++) {

        rowResults = rowResults.concat(c.getString(i) + " || ");

     }

     Log.i(DEBUG_TAG, "Row " + c.getPosition() + ": " + rowResults);

     c.moveToNext();

  }

  Log.i(DEBUG_TAG, "*** Cursor End ***");

}

 

 

예)

Cursor c = mDatabase.query(TABLE_BOOK, null, null, null, null, null, null);

public void LogCursorInfo(Cursor c) {

  Log.i(DEBUG_TAG, "*** Cursor Begin *** " + " Results:" + c.getCount() + " Columns: " + c.getColumnCount());

 

  // Print column names

  String rowHeaders = "|| ";

  for (int i = 0; i < c.getColumnCount(); i++) {

     rowHeaders = rowHeaders.concat(c.getColumnName(i) + " || ");

  }

  Log.i(DEBUG_TAG, "COLUMNS " + rowHeaders);

 

  // Print records

  c.moveToFirst();

  while (c.isAfterLast() == false) {

     String rowResults = "|| ";

     for (int i = 0; i < c.getColumnCount(); i++) {

        rowResults = rowResults.concat(c.getString(i) + " || ");

     }

     Log.i(DEBUG_TAG, "Row " + c.getPosition() + ": " + rowResults);

     c.moveToNext();

  }

  Log.i(DEBUG_TAG, "*** Cursor End ***");

}

 

Date today = new Date(java.lang.System.currentTimeMillis());

Posted by 앗뜨거
,
728x90

Android Toast duration 조정하기..

안드로이드에서는 메세지를 보여주고 사라지는 용도로 Toast를 빈번하게 사용하고 있습니다.
하지만, 아쉬운 점이 하나 있다면, duration을 설정할 수 없습니다. 
그래서, 간단하게 duration을 변경하는 방법으로, Toast의 show()를 쓰레드로 원하는 시간 만큼 계속 보여주면 쉽게 해결할 수 있습니다.

간단하게, 안드로이드 Toast 클래스에서 제공하는 SHORT과 LONG의 기본 시간값입니다..

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds

아래는 CountDownTimer를 이용해서 총 4초동안, 1초씩 줄어들면서 Toast의 show() 메소드를 호출해서, 총 6초(Toast.LENGTH_SHORT이 duration 이니)동안 메세지를 보여주는 코드입니다..

final Toast toast = Toast.makeText(context(), getString(R.string.login_error),Toast.LENGTH_SHORT);
toast.show();
new CountDownTimer(4000, 1000) {
  public void onTick(long millisUntilFinished) {toast.show();}
  public void onFinish() {toast.show();}
}.start();

또 다른 방법으로 https://github.com/quiqueqs/Toast-Expander/blob/master/src/com/thirtymatches/toasted/ToastExpander.java 에서 쓰레드로 시간을 빼면서 루프를 돌리는 방법도 있습니다.

출처 : http://sjava.net/?p=360

Posted by 앗뜨거
,
728x90

4.4 킷캣 에뮬레이터에서는 한글이 제대로 보이지 않습니다.

이는 4.3 에서도 마찬가지이며 4.2.2의 경우에는 CPU/ABI 타입을 MIPS로 하는 경우에만 한글이 보입니다.

 

원인은 한글 글꼴이 들어가 있지 않거나 제대로 설정되지 않아서이며,

한글을 보이도록 하는 방법으로는 첨부된 system.img 파일에 한글 글꼴을 추가해 두었으니, 이 파일을 SDK 매니저를 이용해 설치한 폴더 아래에 있는 system.img 파일 대신 사용하면 됩니다.

 

하지만 이 이미지 파일은 업데이트되는 경우 제대로 동작하지 않을 수 있으므로 직접 추가하는 방법을 사용해야 할 수도 있습니다.

 

아래 두 가지 방법에 대해 설명해 두었습니다.

 

===== 아래 =====

 

1. 시스템 이미지를 한글 글꼴이 들어간 것으로 바꾸는 방법

    (1) 안드로이드 SDK가 설치된 폴더(SDK 매니저를 실행하고 상단에 어떤 폴더가 표시되는지 확인하면 알 수 있습니다.)

         아래에 있는 폴더 중 킷캣의 ARM 타입에 해당하는 폴더로 들어가 보면 system.img 파일을 볼 수 있습니다.

         ex) C:\Documents and Settings\michael\android-sdks\system-images\android-19\armeabi-v7a 폴더

    (2) 원래의 system.img 파일을 system.img.old 로 이름을 바꾸고 첨부된 system.img 파일을 동일한 폴더에 내려받습니다.

    (3) 이클립스를 실행하고 에뮬레이터를 4.4 버전으로 만든 후 실행합니다. (CPU/ABI 타입은 ARM 으로 함)

    (4) 에뮬레이터가 실행되면 설정의 Custom Locale 앱을 실행한 후 ko-KR을 선택하고 하단의 'Select ko-KR' 버튼을 클릭하면 한글 단말이 됩니다.

 

    * 안드로이드 시스템 이미지 라이센스는 구글에 있습니다.

 

2. 직접 시스템 이미지에 한글 글꼴을 추가하는 방법

 

    - SDK 매니저로 설치한 시스템 이미지를 에뮬레이터로 마운트하여 한글 폰트를 추가한 후 새로운 시스템 이미지로 만든다.

    (1) 4.4 버전의 시스템 이미지를 복사한다.
         시스템 이미지는 아래 폴더(윈도우 버전마다 폴더가 다르며, SDK 매니저의 상단에 보이는 SDK 설치 위치를 참조한다.)
         C:\Documents and Settings\michael\android-sdks\system-images\android-19\armeabi-v7a
         여기에서는 system.img 를 system_orig.img 로 복사한다.         
     (2) 이클립스에서 4.4 버전의 에뮬레이터를 실행한다.
     (3) 이클립스에서 DDMS의 File Explorer를 열고 /storage/sdcard 폴더로 system_orig.img 파일을 복사해 넣는다.
         (약 30분 - 1시간 소요됨)
     (4) 명령 프롬프트 창을 열고 아래 폴더로 이동한다.
         cd C:\Documents and Settings\michael\android-sdks\platform-tools
     (5) 아래 명령을 실행하면 에뮬레이터의 쉘을 실행한다.
         adb -s emulator-5554 shell
     (6) 쉘 안에서 sdcard 폴더로 이동한다.
         cd /storage/sdcard
     (7) 새로운 폴더를 하나 만들고 system_orig.img 파일을 이 폴더로 마운트한다.
         mkdir kitkat
         mount -t ext4 -o loop system-ori.img kitkat/
     (8) 이클립스의 DDMS의 File Explorer에서 /storage/sdcard/kitkat/fonts 폴더 안에 NanumGothic.ttf와 NanumGothic_Bold.ttf 파일을 복사해 넣는다.
     (9) 명령 프롬프트의 쉘 안에서 새로 복사한 두 개의 ttf 파일의 권한을 변경한다.
         cd kitkat/fonts
         chmod 644 NanumGothic.ttf
         chmod 644 NanumGothic_Bold.ttf
     (10) 마운트했던 폴더를 언마운트하고 쉘을 종료한다.
         cd ../..
         umount kitkat/
         exit
     (11) 이클립스의 DDMS의 File Explorer에서 system_orig.img 파일을 복사하여 원래의 폴더로 가져온다.
         C:\Documents and Settings\michael\android-sdks\system-images\android-19\armeabi-v7a
         (약 20분-50분 소요됨)
     (12) 원래의 system.img 파일을 system.img.old와 같이 바꾸고 새로 복사해 온 system_orig.img 파일을 system.img 파일로 바꾼다.
     (13) 이클립스에서 새로 4.4 버전의 에뮬레이터를 만들고 실행한다.
     (14) 에뮬레이터가 실행되면 설정으로 들어가 Custom Locale 앱을 눌러 보이는 창에서 ko-KR Korean 을 선택하고 아래쪽의 'Select ko-KR' 버튼을 누른다.
     (15) 이제 한글이 정상적으로 보이면 성공한 것이다.
    

  



'프로그래밍 > 안드로이드' 카테고리의 다른 글

[Android]SQLite 기본 명령어 정리  (0) 2014.07.24
Android Toast duration 조정하기  (0) 2014.07.16
Posted by 앗뜨거
,