이런건 기록해줘야....
그냥 인터넷뱅킹으로 이체하다가 이놈의 보안카드 맨날 들고 다닐 수 없다 라는 생각에 보안카드 앱을 만드려고 했는데, 좋은 거 많이 있네요.....역시 내가 생각할 수 있는 건 다있어...ㅠㅠ
보안카드앱은 "SaveMoney 보안카드 신용카드" 앱이 짱인 것 같네요. 제가 원하는대로 만들었네요~ 대신 광고없는 버전은 유료 ㄷㄷ 하지만, 광고 그까이꺼.....
암튼 얘기가 샜네요...-_-
안드로이드에서는 로컬 데이터베이스를 사용할 수 있습니다. 그것도 매우 손쉽게~!
SQLiteOpenHelper라는 매우 친절한 클래스가 있어서 더욱 쉽게 할 수 있어요~
SQLiteOpenHelper 클래스
package com.mudchobo.android.secretcard.utils; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; public class CardDBHelper extends SQLiteOpenHelper { public CardDBHelper(Context context, String name, CursorFactory factory, int version) { super(context, "card.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table card (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT);"); db.execSQL("insert into card (_id, name) values (null, '신한카드');"); db.execSQL("insert into card (_id, name) values (null, 'KB카드');"); db.execSQL("insert into card (_id, name) values (null, '씨티카드');"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists card"); } }
보면 onCreate와 onUpgrade함수를 오버라이드를 합니다.
이거 보면 create는 현재 생성하려는 파일이 없을 때 최초 한번만 실행하게 됩니다. 테이블을 생성하고 기본값을 넣은 최초의 작업을 여기서 하면 됩니다.
onUpgrade는 db테이블 구조가 바뀌거나 칼럼이 추가 되었을 때 호출하게 됩니다. 호출하는 방법은 생성자에서 마지막 인자로 입력한 version을 더 높은 숫자를 입력하게 되면 upgrade가 호출이 되어 실행하게 됩니다. 여기서 마이그레이션작업을 해주시면 됩니다^^
이렇게 하면 나중에 업데이트 되었을 때 사용자폰에 있는 파일을 업그레이드할 수 있고 그런 식으로 만들어놨네요~
실제 사용할 때
package com.mudchobo.android.secretcard; import java.util.ArrayList; import java.util.List; import android.app.ListActivity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.widget.ArrayAdapter; import com.mudchobo.android.secretcard.utils.CardDBHelper; public class SecretCardActivity extends ListActivity{ private CardDBHelper helper; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); helper = new CardDBHelper(this, null, null, 0); List<String> cards = getCards(); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, cards); setListAdapter(adapter); } public List<String> getCards(){ SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select _id, name from card", null); List<String> list = new ArrayList<String>(); while (cursor.moveToNext()){ list.add(cursor.getString(1)); } return list; } }
helper클래스 생성한다음에, getReadableDatabase() 로 db를 가져와서 쿼리를 날리던 뭐하던 거기에 있는 함수를 쓰면 됩니다~^^ insert같은 건 getWritableDatabase()로 db를 가져와야해요~!
그리고, 안드로이드는 현재 데이터베이스에 뭐가 저장이 되어있는지 확인하기가 매우 힘듭니다. 확인하려면 adb로 콘솔로 들어가서 직접 타이핑해가면서 때려봐야합니다.
손쉽게 확인하려면 루팅하고 root explorer깔면 됩니다(응?)
그러면 이렇게 나와요~ 아핫~!^^
게다가 SQLite Editor라는 앱을 깔면 이 파일을 직접 수정할 수 있답니다. 근데....3딸라짜리 유료앱이네요ㅠㅠ 근데, 뭐 편집 같은 건 코드에서 하는 게 개발자들은 더 편할테니 뭐 굳이 구입하지 않으셔도 아핫~^^