이런건 기록해줘야....
그냥 인터넷뱅킹으로 이체하다가 이놈의 보안카드 맨날 들고 다닐 수 없다 라는 생각에 보안카드 앱을 만드려고 했는데, 좋은 거 많이 있네요.....역시 내가 생각할 수 있는 건 다있어...ㅠㅠ
보안카드앱은 "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딸라짜리 유료앱이네요ㅠㅠ 근데, 뭐 편집 같은 건 코드에서 하는 게 개발자들은 더 편할테니 뭐 굳이 구입하지 않으셔도 아핫~^^

