ラベル java の投稿を表示しています。 すべての投稿を表示
ラベル java の投稿を表示しています。 すべての投稿を表示

2022年2月14日月曜日

String#splitで区切り文字を要素に入れる

java言語のString#splitを使い文字列を配列に分解する時、

引数で指定した文字列は配列から消えるが、要素内に入れたい場合がある。

例えば

String str = "{あいうえお}{かきくけこ}{さしすせそ}";
// これを{}を残したまま以下のように分解したい
String[] result = {
  "{あいうえお}",
  "{かきくけこ}",
  "{さしすせそ}"
};

正規表現の「先読み」「後読み」を使うことで対応できる。

2022年2月2日水曜日

ViewBindingで配置できるViewの上限は253個まで

 ViewBindingを使ってAndroid開発をしているとき、

大量にViewを作るとBindingでエラーなることがあった。


2021年10月26日火曜日

Firebaseのメールリンクでログインしてみる

 AndroidアプリでFirebaseを使ったメールリンク認証を作る際、
躓いたのでまとめておきます。


メールリンク認証とは

メールアドレスのみで認証する、パスワード設定が不要な認証方法です。

手順は
  1. アプリのユーザ登録画面からメールアドレスを入力してもらう
  2. Firebaseからそのメールアドレスに招待メールが送られる
  3. メールの招待RULをクリックすると、アプリが起動し認証完了(ユーザ登録完了)

メールを受け取れるということは本人である証明。というセキュリティの考え方。

2021年8月22日日曜日

Activityの遷移時、すでに生成しているActivityへ遷移する方法

startActivityでActivityを切り替える場合、
デフォルトのままだと、毎回新規でActivityのインスタンスを作ってしまう。
なので、すでに同名Activityが存在していても、新しいActivityがスタック上にできあがる。


Intentで指定したActivityがすでに生成されている場合は、
生成済みActivityに遷移させるにはどうするか。について書いていく。

2021年3月25日木曜日

ListViewに1件ずつ追加する方法

Androidでのリスト表示はListViewを使用することが多い。
何かを契機に1件ずつレコードを追加していく際によく以下のことが起こる
  • Listには追加できているのに見栄えに反映されない
  • 更新すると表示位置が先頭行に戻ってしまう
なので、
ボタンを押下を契機に一件ずつ要素を追加していき、
表示位置も維持するコードのサンプルを載せておく

2021年3月13日土曜日

SharedPreferences#StringSetの挙動について

 SharedPreferencesでStringSetを用いて追加保存する際、以下が起こることがある
  • 1件しか保存されない
  • 保存してないのに勝手にデータが保存されている

結論を先に書くと、
SharedPreferencesからgetStringSetする際、シャローコピーすれば解決するが
 // java版
 Set<String> set = new HashSet<>(
   getSharedPreferences("set",MODE_PRIVATE).getStringSet("data", new HashSet<>()));

 // Kotlin版
 val set = getSharedPreferences("set", MODE_PRIVATE)
   .getStringSet("data", mutableSetOf())?.toMutableSet()
どういう理屈なのかをもう少し詳しくまとめる。



2021年3月4日木曜日

findViewByIdとrequireViewByIdの違い

Androidでレイアウトファイルに定義したViewのインスタンスを探すのに
findViewByIdを使ったことある人は多いと思う。
ViewのAPI仕様を見てたら、requireViewByIdという似たようなメソッドを発見したので、違いを書き残しておく。

2021年2月26日金曜日

ラジオボタンで選択中の文言を取得する

Androidでラジオボタンを使う際
選択中のラジオボタンの情報がほしくなることがある。
方法として
  • 公式通り、各ラジオボタンのクリック処理を実装し、 押されたタイミングで情報をローカル変数に保持しておく
  • 各ラジオボタンにisChecked()を実行していき、チェックONのラジオボタンを探す
  • RadioGroupのOnCheckedChangeListenerで変化を監視
どれもローカル変数を用意したり、全Viewチェックしたりで効率的でない。
今回はRadioGroupのAPI仕様を見てたら、丁度良さそうなのがあったので紹介。


2021年2月23日火曜日

AndroidでLatex(数式)を扱う方法

 Androidの標準機能では数式を扱うことはできないので、外部ライブラリを探してみた。
Latexで数式が書けるライブラリを発見したので、使い方まとめ

2021年2月14日日曜日

パーミッション設定せずに外部ストレージ保存する方法

Androidスマホでデータを取って、PCと接続して抜き出す。
これを繰り返すような作業をするとき、端末内にファイル書き込みする手が有力だ。

その際に直面するのが、どこにファイル保存するか。
内部ストレージになら簡単に保存できるが、PCへファイルの抜き出しが面倒...
逆に外部ストレージに保存するなら、Androidのシステム上、Manifestへパーミッション設定、動的にラインタイムパーミッションの実装が必要で面倒...しかも外部ストレージアクセス法がOSバージョンによって異なるのも厄介。

なので、今回は
パーミッション設定せずに外部ストレージ保存する方法を書き残しておく。


2021年1月30日土曜日

CompactCalendarViewで日付を取得する

Androidの開発でカレンダーを使うとなると、CalendarViewかCompactCalendarView。ダイアログ表示も含めるならDatePickerDialogもありますね。
今回はあまり使う機会のないCompactCalendarViewの日付取得方法を残しときます。

2021年1月25日月曜日

Androidでパズドラ風な操作を実装する

Androidでパズドラ風のドラッグ操作を作る機会があったのでjavaでのソースコードを残しておく
Kotlinも書こうかと思ったけど、コピペしてAndroidStudioに貼ったら自動変換されるので良しとする
こういう動き


2018年9月29日土曜日

IntStreamを降順ソートする方法

java言語で整数列をソートする場合、 IntStream用いたソートを思い浮かべるが IntStream#sorted()は昇順ソートしかできず、標準APIからは降順ソートができない。
調べてみると、Stream<Integer>に変換してComparatorを用いて逆順ソートする類が多い模様。
なので、IntStreamのまま降順ソートする方法をメモ書きしておく。

2018年8月4日土曜日

財布に入っていたレシートがベンフォードの法則に従っているのか

財布にレシートをためる癖があり、久しぶりに整理しようと、財布を見てみたら結構溜まってた。
普通に捨てるのも面白みがないので、財布に入ってるレシートの金額がベンフォードの法則に従っているのか調べてみた。

 ベンフォードの法則とは
Wikipediaを見るのが早いが、簡単に言うと
「自然界の数値の最初の桁の分布は、ある特定の分布になっている」という法則
具体的には、数値$x$の最上桁目の数字$n$が出現する確率$p$は
\[ p = \log_{10} (n+1) - \log_{10}(n) = \log_{10}\left(1 + \frac{1}{n}\right) \] つまり、出現確率は以下のようになり、最上桁目の数値は「1」が出やすい。って法則
$n$123456789
確率$p$30.1%17.6%12.5%9.7%7.9%6.7%5.8%5.1%4.6%

2018年6月10日日曜日

SketchwareでSnackbarを使う方法

Android端末でAndroidアプリを作成する方法に「Sketchware」がある
Viewやイベントをブロックで組んでいく感じで、プログラミング入門ゲーム「Scratch」に似てる
既存のブロックの組み合わせで作るので、Android標準のマニアックなViewは用意されていないので使えない
ところが、
ブロック作成にて「Operator」のなかにソースコードをゴリゴリに書けるブロックがあった
なので、Android標準のViewオブジェクト「Snackbar」を作ってみた

2018年6月2日土曜日

【Java】郵便番号から住所を取得する

java言語を使って、郵便番号から住所を取得する方法を調べてみた。

WebAPIを利用する

郵便番号をインプットに、住所を取得できるWebAPIが公開されていたので利用する。
WebAPIの特徴は以下
利点コード量が少なくて済む
欠点 サービスが終わったら使えない(いつ終わるのかも不明)
オフライン環境では使えない
利用規約がよくわからないものが多い(これは自分の理解力のせい...)

住所取得APIはググったらたくさん出てきたけど、今回はAPIキーを必要としない、
株式会社アイビスが提供しているWebAPIを利用してみる。

https://zipcloud.ibsnet.co.jp/doc/api

上記URLにも記載の取り、ちゃんと利用規約を読んで利用してね。

2017年10月20日金曜日

プログラムでオイラー数を求めてみる


オイラー数については良く知らないんだけど、プログラムする機会があったのでまとめてみる

 オイラー数とは
オイラー数は、双曲線正割関数のテイラー展開における展開係数として定義される \[ sech(z) = \frac{1}{sinh(z)}= \frac{2}{e^{z}+e^{-z}}= \sum_{k=0}^{\infty} \frac{E_{k}}{k!}z^{k} \] この$E_{k}$がオイラー数である
特徴として、この数列は整数であり、奇数項がすべて 0、偶数項の符号が交互に切り替わる
オイラー数$E_{k}$は$k$が偶数のとき以下の漸化式を満たす
\[ E_0 = 1 \ \ ,\ \ \sum_{i=0}^{n} {}_{2n} C _{2i} E_{2i} = 0 \] ほぼWikiのコピペだけど、前知識はこんなもん。漸化式が解ればプログラムは組めるので..

2016年10月8日土曜日

三角形ボタンの押下判定方法

基本的にViewで作成されるレイアウトは四角形だ
そこにいろんな形の画像でボタンを作るには、背景を透過にした絵のイメージ画像を使う
この方法で実装した際、Viewの絵の部分をクリックしたときに動作させたいが、画像の余白(透過)部分を押しても反応してしまう問題がある

三角形の画像を想定したとき、
Viewの余白を押したときは反応せず、画像部分を押したときに反応する処理を考える

2016年8月16日火曜日

数字の桁数を取得する方法(2進数ver)

前回紹介した「 数字の桁数を取得する方法」で
2進数表記時の桁数取得方法について触れてなかったので、改めて書いてく
基本的には2進数でもやり方は同じだ

2016年7月29日金曜日

数字の桁数を取得する方法

数字の桁数を取得する関数って意外とない。。
結構使うものだと思うんだけど、なんで提供されてないんだろ?
備忘録にまとめとく