Androidアプリ開発④:入力フォームと保存の仕組みを学ぼう

これまでの記事では、画面を作成し、ボタンを押して動作させる方法を学びました。ここまでで「ユーザーが操作できるアプリ」の基本は体験できたと思います。

次のステップは、ユーザーが入力したデータを扱うことです。例えば「メモを入力して保存する」「名前を入力して次回起動時に表示する」といった仕組みです。アプリがデータを扱えるようになると、一気に実用的になります。

この記事では、Androidアプリでの入力フォームの作成方法と、データを保存する仕組み(SharedPreferences簡単なデータベース)について解説します。


Androidでデータを扱う方法

アプリでデータを保存する方法はいくつかあります。

  1. 一時的なデータ(メモリ上のみ)
    → アプリを終了すると消える。
  2. SharedPreferences(シェアードプリファレンス)
    → 設定や小さなデータの保存に使える。
  3. ファイル保存
    → テキストファイルやJSON形式で端末に保存。
  4. SQLiteデータベース
    → 複数のデータを表形式で管理。
  5. クラウド保存(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に公開する流れを学びましょう。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。