0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【kotlin】超簡単なMVPを実装してみた、②LocalRepository設定(ローカルデータに保存、読み込み)

Last updated at Posted at 2022-01-15

はじめに

今回はMVP(アーキテクチャ)に沿って、LocalRepository設定(ローカルデータに保存、読み込み)を実装していきたいと思います。

本記事は「【kotlin】超簡単なMVPを実装してみた、①Presenter」の内容を引き継いで実装しています。

これまでの内容は
【kotlin】超簡単なMVPを実装してみた、①Presenterの実装
をご参照ください

実装内容

LocalRepository(ローカルデータに保存、読み込み)まで実装する。
①EditTextに文字を入力してボタンを押したら、文字を保存し、下部のTextViewに表示させる。
②アプリを閉じ、再起動したら保存した文字を読み取り、下部のTextViewに表示させる。
presenter.png

実装

[レイアウト]
※前回と同じです。
①editText
②button
③textView
presenterのコピー.png

[コード]
・LocalRepository設定
※LocalRepositoryの役割はPresenterに橋渡し、Presenterで使用するメソッドを定義する。
※SharedPreferencesを使用する。
①LocalRepositoryを作成。
②LocalRepositoryで使用するメソッドを追加する。

LocalRepository
interface LocalRepository {

    //②文字を保存するメソッド
    fun saveText(text: String)

    //②文字を読み込むメソッド
    fun loadText():String

}

③PreferencesManagerを作成。
④戻り値にLocalRepositoryを導入する。
⑤SharedPreferenceインスタンス化。
⑥LocalRepositoryで設定したメソッドが出るので設定。
※SharedPreferencesの使い方は割愛させていただきます。

PreferenceManager
//④戻り値にLocalRepositoryを導入する。
class PreferenceManager(context: Context): LocalRepository {

    //⑤SharedPreferenceインスタンス化。
    val sharedPref = context.getSharedPreferences("my_settings", Context.MODE_PRIVATE)

    //⑥文字を保存する処理
    override fun saveText(text: String) {
        sharedPref.edit().putString("a",text).apply()
    }

    //⑥文字を読み出す処理
    override fun loadText():String {
        return sharedPref.getString("a","初期値")!!
    }
}

・Presenter設定
①Presenterの引数にLocalRepositoryを追加
②LocalRepositoryのメソッドを呼び出し使用する。

MainPresenter
//①Presenterの引数にLocalRepositoryを追加
class MainPresenter(private val view: MainContract.View, private val localRepository:  LocalRepository): MainContract.Presenter {

    init {
        view.presenter = this
    }

    override fun start() {
        //②文字を呼び出す
        val text =localRepository.loadText()
        view.showTextView(text)
    }

    override fun onClickButton(text: String) {
        //②文字を保存する
        localRepository.saveText(text)
        view.showTextView(text)
    }
}

・View設定
View側
①Presenterに引数にpreferenceManagerを追加

MainFragment
class MainFragment: Fragment(),MainContract.View {

    override lateinit var presenter: MainContract.Presenter
    lateinit var editText :EditText
    lateinit var button :Button
    lateinit var textView :TextView

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_main, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        editText = view.findViewById<EditText>(R.id.editTextText)
        button = view.findViewById<Button>(R.id.button)
        textView = view.findViewById<TextView>(R.id.textView)

        //①Presenter初期化
        initPresenter()
        presenter.start()

        button.setOnClickListener{
            presenter.onClickButton(editText.text.toString())
        }
    }
    override fun showTextView(text: String) {
        textView.text = text
    }
    fun initPresenter() {
        if (::presenter.isInitialized) {
            return
        }
        context?.let {
            presenter = MainPresenter(this, PreferenceManager(it))
        }
    }
}

以上、LocalRepositoryの実装でした。
次回Retrofitを使用したRemoteRepository設定(APIのやり取り)の設定を記事にしたいと思います。

関連記事

【kotlin】超簡単なMVPを実装してみた、①Presenterの実装
【kotlin】超簡単なMVPを実装してみた、③RemoteRepository設定(APIのやり取り)

参考資料

Android アプリ設計パターン入門
テストが書けない人のAndroid MVP
todo-mvp

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?