この講座で多分出来るようになること。
少し複雑なAndroidアプリの一通りの作り方。
データの保存・読込、その他いろいろ。
対象:複数のandroid本を読んで知ったかぶっている人、
何となく知ってても実際のandroidアプリを作ったことがない人。
ちなみに上記の対象には私も含まれます・・。
[ad#336×280]
実際に私が上記のチュートリアルをやりながら解説していきます!
Step1: Notepad Exercise 1の勉強事項+準備編
勉強事項
・ListActivityとMenu optionsの基本的な使い方
・SQLiteの保存の仕方
・cursorの使い方
・レイアウトいろいろ
project exercises archive (.zip)をダウンロードして解凍。
Android Developer Toolsを開いて、
(参考:AndroidをMacにインストールして実行する、AndroidをWindowsにインストールして実行する)
New -> project -> Android Project from Existing Code -> Nextボタンをクリック
先ほど解凍したフォルダの中に、Notepadv1というのがあるのでそれをBrowserに指定してFinishボタンをクリック
Step2: ソースコードを眺めよう!
この時点でNotepadv1.javaとNotesDbAdapter.javaがソースコードの中に入っています。
レイアウトとマニフェストには特筆する点なし。
アプリの起動とともにNotepadv1のアクティビティが呼び出されるようになっています。
Notepadv1.java
レイアウトに何もない感じなので、
現時点ではNotepadv1も特に何もない感じなのでコメント解説抜きで、ソースコードだけ。
package com.android.demo.notepad1; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class Notepadv1 extends Activity { private int mNoteNumber = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } }
NotesDbAdapter.java
NotesDbAdapterクラスが、データベースへアクセスして
ノートを作ったり削除したり、ノートのリストを取ってきたり、いろいろ行います。
package com.android.demo.notepad1; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class NotesDbAdapter { // まずは最初にいくつか必要なコンスタントを作っておこう // まずデータベース(db)のフィールド名のコンスタントを作るー public static final String KEY_TITLE = "title"; public static final String KEY_BODY = "body"; public static final String KEY_ROWID = "_id"; // TAGは特に気にせずに! private static final String TAG = "NotesDbAdapter"; // mDbHelperはdbを開いたり閉じたりするのを手伝ってくれるよ private DatabaseHelper mDbHelper; // dbオブジェクトですー private SQLiteDatabase mDb; // dbのテーブル作成用するための命令文を用意しておく private static final String DATABASE_CREATE = "create table notes (_id integer primary key autoincrement, " + "title text not null, body text not null);"; // db名をdata、テーブル名をnotesにするよ private static final String DATABASE_NAME = "data"; private static final String DATABASE_TABLE = "notes"; private static final int DATABASE_VERSION = 2; // contextというやつが、dbを作ったり開いたりするのを許可するよ private final Context mCtx; // SQLiteOpenHelperはデータベースを開くのを助けてくれるよ // こいつを継承した、DatabaseHelperクラスを作ろう private static class DatabaseHelper extends SQLiteOpenHelper { // コンストラクタ。 // 指定したdbがない場合、新しくdbを作ってくれる DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // dbのテーブルを作るよ db.execSQL(DATABASE_CREATE); } // dbのバージョンをアップした場合、前のdbを削除して新しいdbを作るよ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS notes"); onCreate(db); } } // contextというやつが、dbを作ったり開いたりするのを許可するよ // コンストラクトするときにcontextをもらって、activityに渡しておこう public NotesDbAdapter(Context ctx) { this.mCtx = ctx; } // dbを開こう! // DatabaseHelperのインスタンスを作る、そして // getWritableDatabaseを呼んでSQLiteDatabaseをもらおう public NotesDbAdapter open() throws SQLException { mDbHelper = new DatabaseHelper(mCtx); mDb = mDbHelper.getWritableDatabase(); return this; } // dbを閉じる、それだけ! public void close() { mDbHelper.close(); } // 新しいノートを作ります! public long createNote(String title, String body) { // ContentValuesはdbに1つデータを入れる1セットみたいな感じ ContentValues initialValues = new ContentValues(); initialValues.put(KEY_TITLE, title); initialValues.put(KEY_BODY, body); // テーブルに上記で作ったデータを挿入! return mDb.insert(DATABASE_TABLE, null, initialValues); } // 特定の列のノートを削除、それだけ public boolean deleteNote(long rowId) { return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; } // ノートのリストを呼び出せるメソッドだよ // データそのものじゃなくて、場所を示すみたいなCursorをくれるよ public Cursor fetchAllNotes() { // 最初の引数は欲しいリストのテーブル名 // 次の引数は欲しいカラムデータ // それ以降は、いろいろな条件、ここでは全リストなので全部null return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, KEY_BODY}, null, null, null, null, null); } // 前のメソッドと似たようなやつだよ // 前のはリストだけど、これは1つだけノートの場所を取ってくるよ public Cursor fetchNote(long rowId) throws SQLException { // 最初の引数にtrueと指定すると、データを1つだけ取ってくるよ Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null, null, null, null, null); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; } // ノートを更新するよ、それだけ public boolean updateNote(long rowId, String title, String body) { ContentValues args = new ContentValues(); args.put(KEY_TITLE, title); args.put(KEY_BODY, body); return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; } }
NotesDbAdapterクラスを眺めて、
わかった感じになったら、それでOK。
今回の講座1はこれにて終了です。
コメントを残す