これまでの記事では、画面を作成し、ボタンを押して動作させる方法を学びました。ここまでで「ユーザーが操作できるアプリ」の基本は体験できたと思います。
次のステップは、ユーザーが入力したデータを扱うことです。例えば「メモを入力して保存する」「名前を入力して次回起動時に表示する」といった仕組みです。アプリがデータを扱えるようになると、一気に実用的になります。
この記事では、Androidアプリでの入力フォームの作成方法と、データを保存する仕組み(SharedPreferences と 簡単なデータベース)について解説します。
Androidでデータを扱う方法
アプリでデータを保存する方法はいくつかあります。
- 一時的なデータ(メモリ上のみ)
→ アプリを終了すると消える。 - SharedPreferences(シェアードプリファレンス)
→ 設定や小さなデータの保存に使える。 - ファイル保存
→ テキストファイルやJSON形式で端末に保存。 - SQLiteデータベース
→ 複数のデータを表形式で管理。 - クラウド保存(Firebaseなど)
→ ネットを通じてサーバーに保存。
今回は初心者でも使いやすい SharedPreferences と 簡単なSQLite利用 を中心に解説します。
入力フォームを作成しよう
まずは入力フォームを作ってみましょう。
1. XMLレイアウト
名前を入力して保存するシンプルな画面を作ります。
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editTextName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="名前を入力してください"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_margin="16dp"/>
<Button
android:id="@+id/buttonSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存"
app:layout_constraintTop_toBottomOf="@id/editTextName"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="16dp"/>
<TextView
android:id="@+id/textViewResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="入力結果が表示されます"
android:textSize="18sp"
app:layout_constraintTop_toBottomOf="@id/buttonSave"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="16dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
EditText
→ 入力フォームButton
→ 保存ボタンTextView
→ 保存結果の表示
入力データを扱う(Kotlinコード)
次に、フォームから入力したデータを取得して表示するコードを書きます。
package com.example.datastore
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val editTextName: EditText = findViewById(R.id.editTextName)
val buttonSave: Button = findViewById(R.id.buttonSave)
val textViewResult: TextView = findViewById(R.id.textViewResult)
buttonSave.setOnClickListener {
val name = editTextName.text.toString()
textViewResult.text = "入力された名前: $name"
}
}
}
これで入力した名前を取得し、ボタンを押すと画面に表示されます。
データを保存する:SharedPreferences
次に、入力した名前を保存して、アプリを再起動しても残るようにしましょう。
保存するコード
val sharedPref = getSharedPreferences("MyData", MODE_PRIVATE)
val editor = sharedPref.edit()
editor.putString("userName", name)
editor.apply()
読み出すコード
val savedName = sharedPref.getString("userName", "未設定")
textViewResult.text = "保存された名前: $savedName"
全体コード
buttonSave.setOnClickListener {
val name = editTextName.text.toString()
// 保存処理
val sharedPref = getSharedPreferences("MyData", MODE_PRIVATE)
val editor = sharedPref.edit()
editor.putString("userName", name)
editor.apply()
textViewResult.text = "保存された名前: $name"
}
// 起動時に読み込み
val sharedPref = getSharedPreferences("MyData", MODE_PRIVATE)
val savedName = sharedPref.getString("userName", "未設定")
textViewResult.text = "保存された名前: $savedName"
これで「入力して保存 → アプリを終了 → 再起動」してもデータが残ります。
複数データを扱う場合:SQLiteデータベース
名前だけならSharedPreferencesで十分ですが、複数のデータを管理したい場合は SQLiteデータベース を使います。
SQLiteを使うメリット
- 複数のデータを一覧で管理できる
- 検索や並べ替えができる
- 本格的なアプリに応用可能
Roomライブラリ(推奨方法)
Androidでは直接SQLiteを使うよりも、Googleが提供している Roomライブラリ を使うのが一般的です。
Roomを使うとSQL文を直接書かずにデータ操作ができます。
例:メモアプリ用のEntity
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class Memo(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val content: String
)
DAO(データ操作用インターフェース)
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
@Dao
interface MemoDao {
@Insert
fun insert(memo: Memo)
@Query("SELECT * FROM Memo")
fun getAll(): List<Memo>
}
Database定義
import androidx.room.Database
import androidx.room.RoomDatabase
@Database(entities = [Memo::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun memoDao(): MemoDao
}
これで本格的なデータ管理ができるようになります。
保存の選び方まとめ
- ちょっとしたデータ(名前、設定値など) → SharedPreferences
- 大量のデータやリスト管理 → SQLite / Room
- ネットで共有したい → Firebaseやクラウドサービス
初心者はまず SharedPreferences をマスターするのがおすすめです。
まとめ
今回は、Androidアプリで 入力フォームを作成し、データを保存する仕組み を解説しました。
- EditTextで入力フォームを作る
- 入力したデータを取得し、TextViewに表示する
- SharedPreferencesで小さなデータを保存する
- Roomを使えば複雑なデータ管理も可能
アプリがデータを扱えるようになると、メモ帳、TODOリスト、設定保存など一気に応用範囲が広がります。
次回は 「完成したアプリをスマホで動かす!実機テストと公開手順」 を解説します。エミュレーターや実機でのテスト方法、そしてGoogle Playに公開する流れを学びましょう。