引くほど忘れっぽい駆け出しSEぱかぱかの備忘録です。免許更新は思いの外一瞬で終わったので、本屋さんに立ち寄り本を2冊購入しました。1冊目は「良いコード/悪いコードで学ぶ設計入門」です。技術評論社Amazonとてもタメになるとプロジェクト内で話題になっていたこの本。良い設計という視点がまだ全く持てておらず指摘を喰らうことも多いので、しっかり読んで今後に役立てたいと思います。今度ブログでも内容について取り上げたいですね。2冊目は「たった2日でマスターできるiPhoneアプリ開発集中講座」というiOSアプリ開発の本です。最近自主学習ではAndroidの方ばかり進めていたのですが、実務ではiOSも同じくらいの比率で触れる機会があるので流石に一通りさらっておいた方がいいかと思い始めました。手をつけるとどちらも中途半端になりそうで怖いのですが...でもせっかくXcodeを入れたいがためにMacBookを奮発して購入したわけなので、iOSの方もぼちぼち手をつけていきたいですね!本屋さんから帰ってきたら、今日はゆっくり腰を据えて勉強時間を取ることができましたよ。最近平日も休日も忙しくてろくに勉強できていなかったので、良い時間となりました。Goldの復習シリーズで入出力についてまとめていきたいと思います。APIの連携を実装していた時に、InputStreamのレスポンスデータを取得する場面があり「お!全然覚えてない!笑」となったので復習していきます。◆入出力用のパッケージ入出力用のパッケージはバージョンアップに伴いライブラリが拡充し、現在は以下のようなパッケージが存在します。基本データ方を格納するバッファや高機能な入出力チャネル、正規表現ライブラリなどjava.nioパッケージに含まれる・NIO.2ファイル自体の操作を充実させるための追加機能(NIO.2)を提供java.nio.file.Pathインターフェース、java.nio.file.Filesクラスなど◆Fileクラスディスクに保存されているファイルやディレクトリをオブジェクトとして表現できます。UNIXやLinuxでパス名の表現が異なるため、Javaでは抽象パス名を導入しています。これによりシステムに依存せずにパス名を表現できます。◆ストリームファイルへのデータ書き出し・読み込みなどデータ送受信を連続的に行うものをストリーム(データの流れ)といいます。ストリームの抽象クラス大きく分けると4種類あります。説明FileReaderファイルからchar単位の読み込みを行うストリームFileWriterファイルからchar単位の書き出しを行うストリームBufferedReaderchar単位で文字・配列・行をバッファリングしながら読み込むストリームBufferedWriterchar単位で文字・配列・行をバッファリングしながら書き出すストリーム◆FileInputStreamとFileOutputStreambyte単位でファイルの入出力を行うストリームを生成します。コンストラクタは引数にFileオブジェクトをとるものとファイル名をとるものがあります。float)、String型のデータを読み書きできるストリームです。単体では使用できず、他のストリームと連結して使用する必要があります。str)引数で指定されたデータをUTF-8形式で出力ストリームに書き出す・close()ストリームを閉じる◆FileReaderとFileWriterchar単位で読み書きを行い、文字コードは自動的に変換されます。JavaプログラムからOSの文字コードを意識せず入出力できます。str)引数で指定された文字数をスキップする・newLine()改行文字を書き出す・flush()目的の書き出し先にただちに文字を書き出すまだシリアライズやファイル操作についてもありますが、ちょっと長くなりそうなので今日はこれくらいにします。気が向いたら入出力第2弾をまとめたいと思います。最後まで読んでくださりありがとうございました。23:19Tweet広告を非表示にするもっと読むコメントを書く2023-05-21見たい鳥をDBに保存するAndroidこんにちは!日曜朝のぱかぱかです!平日は残業、土日は遊びに費やしてしまいなかなか勉強時間が取れていない昨今...随分前に作成した自作アプリでDBとの連携を行う機能の記事が書けていなかったのですが、ついに筆を進めております。これを片付けて今日も午後から遊びに出かけてきます😇それでは見ていきましょう!「鳥図鑑」から「見たい鳥DB」に登録したいまずは今回やりたいことをお話しします。現在作っている野鳥コレクションアプリに存在する画面は以下の通りです。・発見した鳥リスト:鳥図鑑から登録した発見した鳥のリストを表示これを踏まえ今回のゴールは以下の2つになります。SQL🐘の資格を取得していたので、ぜひDBとして実際に使う練習をしてみたいと思っていたのですが、デフォルトがSQLiteということなのでこれを使うほかありませんね...今後アプリ開発をやっていくとしたら、ずっとSQLiteとお付き合いすることになるのでしょう。違いはあまりよく分かりませんが!笑DBを利用する手順としては以下のようになります。1データベースヘルパークラスを作成しインスタンスを生成する。2アクティビティでデータベースヘルパーオブジェクトからデータベース接続オブジェクト(SQLiteDatabaseオブジェクト)を取得する。3SQLiteDatabaseオブジェクトを使ってSQLを実行、結果を取得する。それでは1つずつ進めていきます。1データベースヘルパークラスを作成しインスタンスを生成まずはSQLiteOpenHelperクラスを継承してDatabaseHelperというクラスを作成します。SQLiteOpenHelperクラスではonCreate()とonUpgrade()の2つが抽象メソッドとして定義されているため実装する必要があります。onCreate()はコンストラクタで指定したDB名のDBが存在しない時、つまり初期状態に1回だけ実行されます。よって、そのonCreateメソッド内に以下のようなデータベース作成用SQL文字列を記述することで初期設定を行います。今回はwantBirdという見たい鳥の名前と登録日を登録するテーブルを作成します。※今回onUpgrade()については一旦空の実装としているため省略します。次に鳥図鑑画面のActivityでヘルパーオブジェクトを生成、解放する処理を記述します。・オブジェクトの生成ヘルパーオブジェクトはアクティビティの様々な処理で使われるため、あらかじめアクティビティのプロパティとして生成しておく必要があります。実行タイミングはアクティビティの終了時、すなわちonDestroy()が最適です。ヘルパーオブジェクトの解放。super.onDestroy()}次に生成したヘルパーオブジェクトからデータベース接続オブジェクトを取得し、データ保存処理を記述します。現在は鳥図鑑のリストをタップした際に以下のようなダイアログを表示するようにしています。よってデータ保存処理はダイアログフラグメントの「登録」ボタン処理中に記述してあげます。「登録」ボタン押下時に実行されるinsertWantBirdメソッドの処理が以下です。取得したデータベース接続オブジェクトを使ってインサート文を実行します。これによって、鳥図鑑から見たい鳥リストに鳥を登録できるようになりました。データベースヘルパーオブジェクト。データベースヘルパーオブジェクトからデータベース接続オブジェクトを取得。インサート用SQL文字列の用意。//SQL文字列を元にプリペアドステートメントを取得。インサートSQLの実行。stmt.executeInsert()}次は見たい鳥リストの表示です。見たい鳥リストのアクティビティでは以下のようにDBからデータを取得する処理を記述します。0)db.close()その結果がこちらです。見たい鳥リストに登録した鳥が表示されるようになりました。Inspectionの機能を使って実際のDBの状態を見てみると以下のようになっています。今日はこれにて終了とします。アプリらしくなってきて嬉しいです。ここまで読んでくださりありがとうございました。資格ご無沙汰しております!ぱかぱかです!ゴールデンウィークはキャンプに行ったり帰省をしたり色々エンジョイしてしまい明けてからもバタバタしていたらブログの更新が滞ってしまっていました...いろんな人と会って話せて、なかなか充実した日々になりましたよ。仕事の方では先日、1年間のOJT明け報告会がありました。働き始めて1年経ったんだなと思うと感慨深いです。振り返ってみると、学べたこともたくさんあったのですがその分忘れていることもたくさんあるな...と気づきました。勉強したのに、モバイルのプロジェクトに移ってからJavaのことを結構忘れちゃってる...でも、仕組みとしてはモバイルもJavaとやり方が似ていたりします。いうわけで、Androidの学習を進めがてらJavaの復習もしてみようと思います!本日はJDBCについてまとめていきます。APIを使用することでDB製品に依存しないプログラムを作成できます。◆主なクラスとインターフェースJDBCを扱うにあたり使われるクラスやインターフェースには以下のようなものがあります。各インターフェースの実装クラスがJDBCドライバとして各ベンダから提供されています。説明java.sql.DriverManagerDBのドライバを管理し、DBの接続を行うjava.sql.DataSourceサーバ側で管理されたデータソース(DB接続情報)を保持するこのオブジェクトを経由してDB接続を行うjava.sql.Connection特定のDBとの接続を表現するjava.sql.PreparedStatementSQL文を表すオブジェクト任意でINパラメータの利用が可能java.sql.ResultSetDBの結果セットを表すオブジェクト◆JDBCアプリケーションの作成JDBCを扱うアプリケーションの作成手順を見ていきます。1java.sqlパッケージのインポートまずはデータにアクセスして処理する基本APIを提供しているjava.sqlパッケージをインポートします。URLを文字列で準備します。URLは以下のような構文で指定します。jdbc:mysql://localhost:3306/golddb3DBとの接続DriverManagerクラスのgetConnection()メソッドを呼び出しConnectionオブジェクトを取得します。取得できなかった場合はSQLExcepitionが発生します。password)URL・ユーザ名・パスワードを引数にとる4ステートメントの取得PrepareStatement()の引数にSQL文を指定し実行することでPreparedStatementオブジェクトを取得します。5SQL文の実行PreparedStatementインターフェースのメソッドを使用しSQL文を実行します。PreparedStatementインターフェースには以下の3種類があります。説明Statement標準的なSQL文を実行PreparedStatementプリコンパイルされたSQL文を実行CallableStatementストアドプロシージャを実行ここではPreparedStatementについて見ていきます。";PreparedStatement取得後、setXXX()で値を設定します。第1引数にパラメータの位置(1から始まる)、第2引数に設定する値を渡します。3);SQL文の実行には以下のメソッドを使用します。pstmt.executeQuery();6結果の取得と処理ResultSetオブジェクトとして結果が返ります。取得した結果をもとに以下のように取得します。rs.getString(1));}7接続のクローズすべての処理が終了したらリソースを解放します。PreparedStatement、ResultSetインターフェースはclose()で解放します。try-with-resouces文を使えば省略が可能です。まとめていたらだいぶ頭が整理されました。次回はAndroidのDB接続と比較して見てみたいですね。ここまで読んでくださりありがとうございました。土曜日は大学院時代に研究室が一緒だった留学生2人と歯医者さんに行ってきました。自己紹介では触れていませんでしたが、私は生物系の研究を大学院の修士課程までやっておりました。ITとは全く関係ない分野ですね...今でも大学の近くに住んでいるので、研究室のメンバーとは交流があります。している留学生は1人がベトナム人、もう1人がタイ人。ベトナムでは年1回歯医者でスケーリング(歯石取り)をするのが慣習のようで、春先に一緒に行くのが恒例になっています。自分もせっかくなのでスケーリングしてもらったのですが、めちゃめちゃ染みる場所があって縮み上がりました...虫歯かと思い焦りましたが、どうやら知覚過敏が悪化していた模様...染みないようにするコーティングをしてもらいましたよ!ベトナムの子の方はほとんど日本語がわからないので、スケーリング中は通訳的な感じで隣に座っていました。力不足を実感した1日となりました...脱ルー大柴したい...🥹そして夜ご飯は本格的なベトナム料理を食べに行きましたよ!本場の料理との違いとかどういう食材が使われているとか、色々教えて貰いました。フォーももちろんですが、後ろに映っている「チェー」というスイーツもとても美味しかったです!日本では馴染みないですが、甘く煮た豆が使われたぜんざい的なスイーツです。Silverやっぱり資格という目標があると、学ぶべきことの指針が定まるので何から手をつけていいかわからないという状況から脱却することができるのが良いと思っています。Goldを取得してから、会社の方からの目が明らかに変わったように思います。Silverを取得してから次の目標が定まっていませんでした。年始からアプリ開発のプロジェクトに異動になったのでその勉強であっぷあっぷしていたというのもあり...しかしつい先日、プロジェクトの先輩が「Androidアプリケーション技術者ベーシックに合格したので参考書を売ります」という話をモバイル開発のメンバーに持ちかけてくれました。この資格、2012年に作られてから内容のアップデートがされていない化石のような資格です。これを受けるくらいならSwiftの資格を受けた方がいいかななんて思っていました...しかし、参考書をいざ開いてみるとAndroid開発に関わる知識について網羅的にまとまっており、初心者の自分にはちょうどいいのでは?と思い始めました。手に入れたのはこちらの参考書です。翔泳社Amazonその先輩は3冊もこの資格に関わる参考書を保有していたのですがそのうち一番おすすめと言っていたのがこちらでした。読んでみると言語が全てJava前提だったり、Eclipseで開発を行っていたりと時代を感じる...しかし、Androidアプリ開発の根っこの思想は変わっていないと思うのでこちらをひとまず活用して勉強していきたいと思います!私の会社は報奨金の金額が資格のレベルの応じて定まっているのですがこの資格はなぜかS~DまであるうちのBランクに属しています。Goldと同じランクです。内容をチラ見した感じ、そのランク設定は本当にそれは妥当なのか?そんなに難しいのか?とも思ってしまいます...アプリ開発をやっているメンバーからも、あの資格は穴場と陰で噂されていました。08:34Tweet広告を非表示にするもっと読むコメントを書く2023-04-13コンテキストメニューAndroidこんばんは!仕事終わりでモスバーガーに来ているぱかぱかです!(もはやお決まりなのでハンバーガーの写真は割愛)例のごとく今日も日記パートから始まります。昨日は仕事終わりにRRRというインド映画を観てきました!映画好きの会社の先輩が6回も(!?)見に行ったと言っていたので気になっていたのですが、想像以上に面白かったです。王道できっと何事もうまくいくのだろうという謎の安心感と主人公二人の真っ直ぐで熱い生き様が逆に新鮮...!普通に元気出ましたし、観終わるとなんかスッキリしました。ミュージカルがちょっと苦手なのですがインド映画特有の突然始まるダンスもキレキレで楽しくて見入っちゃいましたね...(今日は仕事中ずっと頭の中ナートゥナトゥナトゥでした)今度、他のインド映画も観てみたいと思います😳それでは今日はコンテキストメニューについてまとめていきます!コンテキストメニューって何?コンテキストメニューはリストビューを長押しした時などに表示されるメニューです。前回作成したオーバーフローメニューと似ていて、作り方もほとんど一緒です。長押しすると出てくるそれでは早速作っていきましょう!1メニュー用のxmlファイルを用意オプションメニューと同じように、まずはxmlファイルを作ります。メニュー用のxmlファイルはmenuタグで始まりこの中に選択肢1つにつきitemタグを1つ記述というのも同じです。/></menu>今回は見たい鳥リストの鳥を長押しした時に「発見した鳥に登録」と「見たい鳥リストから削除」の2つのメニューを選択肢を作ることにしました。(仕様を考えず思いつきで進めているので後で大変なことになりそう...)itemタグには以下の2つの属性を記述する必要があります。・idR値として使用するid・android:title選択肢の表示文字列オーバーフローメニューにあったshowAsActionは今回ありません。2アクティビティでxmlファイルをインフレイトxmlの画面部品をJavaオブジェクトにするインフレイトです。これもオーバーフローメニューと同じになります。アクティビティクラスにonCreateContextMenu()メソッドを記述してその中でインフレイトしてあげます。ヘッダタイトルも追加できるので「操作を選んでください。親クラスの同名メソッド呼び出し。コンテキストメニュー用xmlファイルをインフレイト。コンテキストメニューのヘッダタイトルを設定。menu.setHeaderTitle(R.string.menu_list_context_header)}3コンテキストメニューを表示する画面部品を登録onCreate()メソッドの中で以下のメソッドを記述することでコンテキストメニューを表示するビューを登録してあげます。本日はオーバーフローメニューについてまとめていきたいと思います!オーバーフローメニューって何?オーバーフローメニューはオプションメニューの一種です。オプションメニューとは画面上部のアクションバーに表示されるメニューのこと。タップするとさらに選択肢が表示される以下のようなメニューのことを言います。タップすると出てくるそれでは早速作っていきましょう。1メニュー用のxmlファイルを用意メニュー用のxmlファイルはmenuタグで始まりこの中に選択肢1つにつきitemタグを1つ記述します。/></menu>今回はひとまず「すべての鳥」と「お気に入りの鳥」で選択肢を2つ作ることにしました。itemタグには以下の3つの属性を記述する必要があります。以下の3つの属性値がある・never:選択肢をオーバーフローメニューに格納。今回はneverを設定し選択肢をオーバーフローメニューに格納します。ちなみにalwaysを選択すると以下のようになるみたいですよ。邪魔くさそう2アクティビティでxmlファイルをインフレイトまずインフレイトって何?って感じなのですがinflateは膨らませるという意味でAndroidではxmlの画面部品をJavaオブジェクトにすることをこう言うみたいです。メニューを表示させるにはアクティビティクラスにonCreateOptionMenu()メソッドを記述して、その中でインフレイトしてあげる必要があります。オプションメニュー用xmlをインフレイト。true}メニューのインフレイトを行うクラスはMenuInflaterがあります。アクティビティはMenuInflaterインスタンスをmenuInflaterプロパティとして保持しているので上記のようにインフレイトできます。この内容はオプションメニューを表示するときの定型文のようなものみたいです。選択したメニューによって違う画面が表示されるように処理を記述します。今回は戻るメニューを押したときの表示もついでに実装してます。すべての鳥リストデータの生成。すべての鳥リストデータの生成。SimpleAdapterを選択されたメニューデータで生成。returnVal}そして完成した後の画面遷移イメージはこんな感じです!メニューを押したら切り替わるまたさらにアプリらしくなってきました!それでは今日はこの辺にします。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。