이런건 기록해줘야....

그냥 인터넷뱅킹으로 이체하다가 이놈의 보안카드 맨날 들고 다닐 수 없다 라는 생각에 보안카드 앱을 만드려고 했는데, 좋은 거 많이 있네요.....역시 내가 생각할 수 있는 건 다있어...ㅠㅠ 

보안카드앱은 "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딸라짜리 유료앱이네요ㅠㅠ 근데, 뭐 편집 같은 건 코드에서 하는 게 개발자들은 더 편할테니 뭐 굳이 구입하지 않으셔도 아핫~^^




 
Posted by 머드초보
,