これまでの記事では、画面を作成し、ボタンを押して動作させる方法を学びました。ここまでで「ユーザーが操作できるアプリ」の基本は体験できたと思います。
次のステップは、ユーザーが入力したデータを扱うことです。例えば「メモを入力して保存する」「名前を入力して次回起動時に表示する」といった仕組みです。アプリがデータを扱えるようになると、一気に実用的になります。
この記事では、Androidアプリでの入力フォームの作成方法と、データを保存する仕組み(SharedPreferences と 簡単なデータベース)について解説します。
アプリでデータを保存する方法はいくつかあります。
今回は初心者でも使いやすい SharedPreferences と 簡単なSQLite利用 を中心に解説します。
まずは入力フォームを作ってみましょう。
名前を入力して保存するシンプルな画面を作ります。
<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
→ 保存結果の表示次に、フォームから入力したデータを取得して表示するコードを書きます。
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"
}
}
}
これで入力した名前を取得し、ボタンを押すと画面に表示されます。
次に、入力した名前を保存して、アプリを再起動しても残るようにしましょう。
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"
これで「入力して保存 → アプリを終了 → 再起動」してもデータが残ります。
名前だけならSharedPreferencesで十分ですが、複数のデータを管理したい場合は SQLiteデータベース を使います。
Androidでは直接SQLiteを使うよりも、Googleが提供している Roomライブラリ を使うのが一般的です。
Roomを使うとSQL文を直接書かずにデータ操作ができます。
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class Memo(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val content: String
)
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>
}
import androidx.room.Database
import androidx.room.RoomDatabase
@Database(entities = [Memo::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun memoDao(): MemoDao
}
これで本格的なデータ管理ができるようになります。
初心者はまず SharedPreferences をマスターするのがおすすめです。
今回は、Androidアプリで 入力フォームを作成し、データを保存する仕組み を解説しました。
アプリがデータを扱えるようになると、メモ帳、TODOリスト、設定保存など一気に応用範囲が広がります。
次回は 「完成したアプリをスマホで動かす!実機テストと公開手順」 を解説します。エミュレーターや実機でのテスト方法、そしてGoogle Playに公開する流れを学びましょう。