メモ帳アプリのメモ1


データベース

テーブルの情報を定義したMemoContractClass
データベースの操作をするためのMemoOpenHelperが必要

MemoOpenHelper.java
public class MemoOpenHelper extends SQLiteOpenHelper {
    public static final String DB_NAME = "myapp.db";
    public static final int DB_VERSION = 1;

    public static final String CREATE_TABLE =
            "create table memos (" +
                    "_id integer primary key autoincrement, " +
                    "title text, " +
                    "body text, " +
                    "created datetime default current_timestamp, " +
                    "updated datetime default current_timestamp)";
    public static final String INIT_TABLE =
            "insert into memos (title, body) values " +
                    "('t1', 'b1'), " +
                    "('t2', 'b2'), " +
                    "('t3', 'b3')";
    public static final String DROP_TABLE =
            "drop table if exists " + MemoContract.Memos.TABLE_NAME;


    public MemoOpenHelper(Context c){
        super(c, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_TABLE);
        sqLiteDatabase.execSQL(INIT_TABLE);

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL(DROP_TABLE);
        onCreate(sqLiteDatabase);
    }
}

非同期でデータを取得する

ListViewにアダプタを設置してデータを表示させていきたいのですが、その際にはCursorLoaderという仕組みを使うことが推奨されています。CursorLoaderを使うとデータベースに対して非同期に処理が投げられるので、データベースに問い合わせをしている間にActivityが固まってしまうことを防ぐことができます。

CursorLoaderはデータベースに直接アクセスできない

ContentProviderという仕組みが必要

ContentProvider は元々アプリ間でデータを共有するための仕組みで、これを使えば他のアプリにデータを公開して使ってもらうことができるようになります。

MemoContentProvider.java
    public static final String AUTHORITY =
            "com.example.joji.mymemoapp.MemoContentProvider";
    public static final Uri CONTENT_URI =
            Uri.parse("content://" + AUTHORITY + "/" + MemoContract.Memos.TABLE_NAME);

    public static final int MEMOS = 1;
    public static final int MEMO_ITEM = 2;
    public static final UriMatcher uriMatcher;
    static {
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        uriMatcher.addURI(AUTHORITY, MemoContract.Memos.TABLE_NAME, MEMOS);
        uriMatcher.addURI(AUTHORITY, MemoContract.Memos.TABLE_NAME + "/#", MEMO_ITEM);
    }

メモの編集や追加もしていくのでFormActivityという画面を追加