20220112のAndroidに関する記事は3件です。

【kotlin】超簡単なMVPを実装してみた、①Presenterの実装

MVPとは? Androidアーキテクチャの一つ。 ActivityやFragmentで行っていた処理を以下の三つの役割に分ける。 ・Model(データに関する処理を行う) ・View(画面に関する処理、クリック等のイベントを拾ってPresenterに送る処理を行う) ・Presenter(Viewからイベントを受け取り、Modelを操作したり、Viewに伝え画面操作を行うロジカルな処理を行う) [メリット] ・Activity,Fragmentの肥大化を防げる。 ・テストがしやすい。 実装内容 Presenterまで実装する。 EditTextに文字を入力してボタンを押したら、下部のTextViewに表示させる(超簡単)。 実装 [レイアウト] ①editText ②button ③textView [コード] ・準備 ①BasePresenter,BaseViewを作成。 BasePresenter interface BasePresenter {   //起動処理のメソッド fun start() } BaseView interface BaseView<T> { var presenter: T } ・Contract設定 ※Contractの役割はViewとPresenterを橋渡し、双方で使用するメソッドを定義する。 ①Contractを作成。 ②interface Viewとinterface Presenterを作成(戻り値にBasePresenter、BasePresenterを追加)。 ③viewとpresenterで使用するメソッドを作成。 MainContract interface MainContract { interface View: BaseView<Presenter> { //③textViewをテキストを表示するメソッド fun showTextView (text: String) } interface Presenter: BasePresenter { //③Butoonをクリックされた際に使用するメソッド fun onClickButton(text: String) } } ・Presenter設定 ①Presenter作成。 ②Contract.View(MainContract.View)を引数に追加。 ③Contract.presenter(MainContract.Presenter)を戻り値に追加。 ④view.presenter = thisに設定(view側で設定しないと出来ないかもしれない)。 ⑤Contractで作成したメソッドが色々出てくるので設定。 MainPresenter class MainPresenter(private val view: MainContract.View): MainContract.Presenter { //④view.presenter = thisに設定 init { view.presenter = this } //⑤起動処理 override fun start() { } //⑤ボタンが押された時の処理 override fun onClickButton(text: String) { view.showTextView(text) } } ・View設定 ①View(Activity、Fragment)の戻り値にContract.View(MainContract.View)を追加。 ②overrideしたContract.presenter(MainContract.Presenter)を追加。 ③起動時にpresenterをインスタンス化。 ④Contractで作成したメソッドが色々出てくるので設定(showTextView())。 ⑤presenterのメソッドを呼び出す MainFragment class MainFragment: Fragment(),MainContract.View { //②overrideしたContract.presenter(MainContract.Presenter)を追加。 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? { // Inflate the layout for this fragment 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をインスタンス化 presenter = MainPresenter(this) //⑤presenter.startを呼び出す。 presenter.start() button.setOnClickListener{ //⑤presenter.onClickButtonを呼び出す。 presenter.onClickButton(editText.text.toString()) } } //④TextViewに文字を表示させる override fun showTextView(text: String) { textView.text = text } } 以上、Presenterの実装でした。 関連記事 【kotlin】超簡単なMVPを実装してみた、②LocalRepository設定(ローカルデータに保存、読み込み) 【kotlin】超簡単なMVPを実装してみた、③RemoteRepository設定(APIのやり取り) 参考資料 Android アプリ設計パターン入門 テストが書けない人のAndroid MVP todo-mvp
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gradleのバージョンを上げないで"Could not determine java version from"を回避する方法

このエラーが出た場合はgradleのバージョンを上げてやれば良いのですが なんらかの理由でgradleのバージョンを上げられない場合の回避策です。 この方法はandroidで署名なしreleaseビルドを作成する際に使いました。 古いjavaをダウンロードする curl -O https://corretto.aws/downloads/resources/8.312.07.1/java-1.8.0-amazon-corretto-jdk_8.312.07-1_amd64.deb sudo apt install ./java-1.8.0-amazon-corretto-jdk_8.312.07-1_amd64.deb 古いjavaを指定してビルドする JAVA_HOME=~/.jdks/corretto-1.8.0_312 ./gradlew assemble
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ホテルでAndroid端末からローカルサーバーにアクセスしようとして失敗してググった話

ごめんなさい、めちゃめちゃ初歩的な話です。 恥ずかしいですが、同じようなことにハマる方もいるかもしれないので記事にしました。 やりたかったこと ローカルのサーバーにAndroid端末からアクセスして疎通確認をする PCとAndroid端末とで同じWifiに接続し、ローカルのIPアドレスをAndroidアプリ内で指定してローカル疎通する これをホテルでやる そもそもローカルIP指定でやるなんてイケてないじゃんというご指摘はごもっともです、甘んじて受け入れます。 失敗したこと 通信が失敗する、No route to hostというエラー 失敗した理由としては、当該ホテルでプライバシーセパレーターが設定してあり、同じルーターに無線通信している端末間の通信がブロックされているためだと思います。 ホテル東雲は明記してますね。 館内の無線LANにはプライバシー・セパレータ設定がされていますので、共有設定されたパソコンを接続されても、他の パソコンからは認識できないようになっております。 言われてみれば、セキュリティ上あたり前の話か。 解決策 それでも、残念ながら今のサーバーにはステージングサーバーのような代物は存在せず、なんとかローカルで疎通確認したい。 解決策としては、Chrome InspectのPort forwardingを使います。 これで、例えばAndroidからPCのlocalhostの81ポートにforwardしたい場合には、AndroidとPCをUSB接続してAndroid端末からlocalhost:81にアクセスすれば良いわけです。(Port forwardの設定次第ですが) 詳細は以下の記事をば。 あ、あとはngrockを使ってローカルサーバーをインターネットからアクセスする方法でもいけそうですね。 書いてて、めっちゃ初歩的だな〜と恥ずかしいわけですが、誰かの役に立てば幸いです。 そして、ステージングサーバー作ろうという気持ちを高めるわけです。 Enjoyホテルライフ (新型コロナウイルス感染症に関する水際対策の強化に係る措置によって自主隔離中)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む