2018年12月18日火曜日

Google Driveに接続できない

こんにちは。

先日、新アプリをリリースしたのですが、実はリリースが予定より一週間弱延びてしまいました。

理由は、リリース版だとGoogle Driveにバックアップが出来なかったためです。

バックアップ機能は、ライブラリ化しており、他のアプリと共通です。

他のアプリで問題なく動いているので、GoogleのApi ManagerでGoogle DriveのApiの設定を行うのですが、同じように設定すれば動くはずでした。

そもそも、デバッグ版では動いていました。

しかし!!全く同じように設定しているのにアプリが停止してしまいます。

症状としては、ファイルリストを取得する際に、以下のfileList.getItems()がnullとなってしまいます。

まだアプリを公開していないからか、とか、色々悩みましたが、一旦、頭の中をリセットして考え直してみました。

そしたら、「あれ?まさか難読化のせいか?」と気づきました。

難読化するときには、使用する外部ライブラリのクラス名や関数名まで難読化してしまうと自分のプログラムからクラスや関数が見つけられなくなります。

そのため、「proguard-rules.pro」で名前をキープするクラスなどを設定します。

ただ、今までの経験では、「proguard-rules.pro」で設定が足りない場合は、リリースビルドが通りませんでした。

今回は、リリースビルドも問題なく通っていました。

まさかと思いながらも、ググってみると、「proguard-rules.pro」に設定の追加が必要だという記事がありました。

Driveのライブラリは「com.google.apis:google-api-services-drive:v2-rev170-1.20.0」です。

「proguard-rules.pro」の一部です。「追加」の下を今回追加しました。

これで、ビルドし直し、動かすと・・・あぁ・・・動きました・・・。

詳しく調べる時間がないですが、動いてよかったです。




2018年12月16日日曜日

新アプリ「底値チェック」リリース

こんばんは。

新アプリ「底値チェック」をリリースしました。


普段の買い物での節約のために、生活圏内のスーパーやドラッグストアで、一番安い製品を買いたいと思い、作りました。

お店に行ったときや、新聞やWebでお店の広告を見たときに、気になる製品の価格を登録します。

そして、実際に製品を買うのは、最も安い底値のときです。

お店では、あたかも今が一番安いかのように書かれていてますが、過去の価格や他のお店の価格と比較することにより、だまされません。


画面の例


製品の登録は、バーコードで簡単にできます。

底値チェックのヘルプは、こちらです。

https://www.bnbnapp.com/2018/12/bottomprice.html

Google Playのページは、こちらです。

https://play.google.com/store/apps/details?id=com.bnbnapp.bottomprice

よかったら使ってみて下さい。

以上です。

2018年12月7日金曜日

底値チェックのヘルプ



公開中の底値チェックのヘルプを記載します。


0.目次

  1. 簡単な操作説明

  2. 底値チェック画面

  3. バーコード読み込み

  4. 検索画面

  5. 入力画面

  6. 画像拡大画面

  7. 価格入力画面

  8. 価格一覧画面

  9. Web検索画面

  10. 検索結果

  11. 比較

  12. バナー広告非表示

  13. 設定


1.簡単な操作説明


①1つの製品における底値のチェック方法

以下の3つの画面でチェックできます。
底値は700円、単価の底値は1.00円になります。


②容量などが異なる複数の製品における底値のチェック方法

以下のように、小分類内で底値単価で並び替えることによりチェックできます。
この場合、この小分類内では、mlなどの単位を揃える必要があります。



③製品の追加

製品の追加方法は、バーコード読み取り、手入力、Web検索の3通りあります。
商品が手元にあり商品にバーコードがあれば、バーコード読み取りにより追加できます。

バーコード読み取りによる追加方法。




④価格の追加

価格情報の追加は、製品入力画面の【価格追加ボタン】か、製品入力画面の【価格一覧ボタン】から表示される価格一覧画面の【+ボタン】で、価格入力画面を表示して行うことができます。



⑤比較画面

各画面のメニューの【比較】タップで表示される比較画面では、製品情報や価格情報を登録しなくても単価を比較できます。店頭などで登録する暇がない場合にご使用ください。

例として、登録済みの製品と比較する場合を以下に記します。比較したい製品入力画面から比較画面を表示すると、1つ目が入力された状態で表示されます。2つ目に比較したい価格、容量、数を入力して、実行ボタンをタップしてください。どちらの単価が安いか計算されます。



△目次に戻る

2.底値チェック画面





①メニュー

メニュー 説明
表示切替
タップするたびに、製品の一覧(④)の表示形式が変わります。
スマホの表示形式は、1列、2列、画像のみ3列、画像のみ4列、画像なし1列、画像なし2列です。
画面を開き直したとき、前回選択した列数で表示されます。
検索
登録済みの製品の検索画面を表示します。
その他
その他のメニューを表示します。
比較 比較画面を表示します。
・製品を選択していない場合、空の状態で表示。
・1つの製品を選択している場合、選択した製品の底値、容量を1つ目に設定した状態で表示。
・2つの製品を選択している場合、選択した製品の底値、容量を1つ目、2つ目に設定した状態で表示。
設定 設定画面を表示します。
ヘルプ 本ヘルプを表示します。
お知らせと更新情報 お知らせと更新情報を表示します。
動画広告視聴 動画広告視聴ができます。視聴すると広告が一定時間表示されなくなります。残っている広告非表示期間を確認できます。
ログ表示 バックアップの実行結果のログを表示します。



②タブ

登録済みの製品の一覧を以下のグループ分けで表示します。
設定の「一般」-「タブ設定」で、タブの表示/非表示設定、順序設定ができます

タブ説明
メモメモの一覧を表示します。
購入予定入力画面で購入予定とした製品を表示します。
全て全ての製品を表示します。
大分類大分類の一覧を表示します。
タグタグの一覧を表示します。
各大分類該当大分類に所属する小分類の一覧を表示します。


③選択モード切り替えと並び替え




(ア)選択モード切り替え
選択モードに切り替えて、複数選択して変更、または、削除ができます。
操作方法は以下の画像のようになります。




(イ)並び替え順序切り替えボタン
並び替え順序を変更します。▼が降順、▲が昇順です。
タップするたびに、▼→▲と変化します。

(ウ)並び替え項目切り替えボタン
並び替え項目を変更します。製品名、更新日などで並び替えが行えます。タブによって項目は異なります。
タップするたびに、変化します。

(エ)並び替え項目選択ボタン
並び替え項目の選択画面を表示します。

(オ)件数
選択中のタブ(②) の製品などの数を表示します。

④製品の一覧

選択中のタブの製品の一覧を表示します。メニュー(①)で表示方法変更や、③で並び替えができます。

⑤追加ボタン

製品を追加します。以下が選択できます。

選択肢説明
バーコードカメラ機能でバーコードから製品のEANを読み取り、Webから製品情報を取得します。
カメラ機能を使用する為、最初に権限の許可のメッセージが表示されます。
メモ入力メモを入力します。
手入力製品情報を全て手入力します。
Web検索キーワード、EANの検索条件を入力し、Webから製品情報を取得します。


⑥大分類一覧タブ

大分類と小分類は、自由に並び順を設定できます。大分類の並び順の設定方法は以下の通りです。
小分類は、小分類一覧で同様に設定できます。



大分類一覧では、小分類を展開表示することができます。展開方法は以下の通りです。




△目次に戻る

3.バーコード読み込み


カメラ機能でバーコードから製品のEANを読み取り、Webから製品情報を取得します。
カメラ機能を使用する為、最初に権限の許可のメッセージが表示されます。

追加画面のバーコードボタンの横の設定アイコンをタップすると、読み取りモードが選択できます。最新モードを推奨しますが、上手く読み取れない場合は、従来モードの2つをお試しください。
また、「バーコード読み取りボタンを表示」をチェックすると、底値チェック画面にバーコード読み取りボタンが常に表示されます。

①最新モード

枠の中の赤い線にバーコードを合わせると読み取れます。
最新モードのみライトのオンオフができます。読み取りにくい場合にご使用ください。




②従来モード、従来モード(旧カメラ)

製品のEANが読み取れるまで、連続でオートフォーカスを行います。

右上のボタンをタップすると切り取りモードに切り替わります。
中央の切り取り枠の中に読み取りたいバーコードが映るようにしてください。


△目次に戻る

4.検索画面





登録済みの製品を検索できます。検索したい条件を設定して、底値チェック画面に戻ると該当の製品だけが表示されます。検索中は、以下のように底値チェック画面のメニューの検索アイコンが赤くなり、一覧の上に「検索条件に一致する製品のみ表示中」と表示されます。解除ボタンで検索状態をクリアできます。

検索状態は、本アプリを終了して、再度起動した場合も保持しています。


①ボタン

選択肢説明
クリア検索条件を初期状態に戻します。
キャンセル検索条件を変更せずに閉じます。
OK入力した検索条件で検索します。


②製品名

入力した文字列を含む製品名を検索します。

③EAN

入力したEANを検索します。

④タグ

入力した文字列を含むタグを検索します。
入力欄で文字を入力でき、選択ボタンで、選択することもできます。

選択ボタン

⑤製品メモ

入力した文字列を含む製品メモを検索します。


△目次に戻る

5.入力画面



①メニュー

メニュー選択できる条件説明
トップ
底値チェック画面に戻ります。
保存せず終了変更変更の場合、閉じると自動で保存しますが、本メニューをタップすると、保存せずに画面を閉じます。
保存新規追加製品情報を保存します。変更の場合、閉じると自動で保存します。
保存して小分類内表示新規追加製品情報を保存して、本画面を閉じて、保存した小分類一覧を表示します。
削除変更製品情報を削除します。
製品情報再取得
設定されている条件でAmazonか楽天から製品情報を取得します。
ただし、以下は変更しません。
大分類、小分類、容量、タグ、製品メモ
比較
開いている製品を1つ目として比較画面を表示します。
Web検索
製品名を設定した状態でWeb検索画面を起動します。
購入サイト表示
Amazonか楽天のこの製品のページの一覧を表示します。
一覧でタップするとページが表示され、購入や予約ができます。

②大分類、小分類

製品を分類分けするために大分類と小分類を入力してください。
例:大分類ー調味料、小分類ーしょうゆ


③容量

製品に色んな容量がある場合に単価を比較するために入力してください。その際、単位を揃えてください。
例えば、ジュースの1.5リットルと500ミリリットルを登録する場合、1500ミリリットル、500ミリリットルと入力します。
※未入力の場合、「1.0」として計算します。


④画像操作

画像表示部分をタップすると、以下の画像操作ができます。

選択肢説明
拡大表示画像を拡大表示します。
カメラで撮影外部カメラを使用して撮影します。
※カメラの使用の権限許可のメッセージが表示されます。許可をすると操作ができます。
アルバムから選択既にアルバムに保存してある画像が選択できます。
編集外部ツールで画像の編集ができます。
削除表示されている画像を削除します。

⑤購入予定

購入予定の場合、チェックを入れてください。
底値チェック画面の「購入予定」タブにも表示されるようになります。

⑥底値、平均

この製品に紐づいている価格情報の底値と平均が表示されます。かっこの中は容量で割った単価になります。

⑦税率

この製品の税率を選択します。

⑧タグ

編集ボタンをタップして表示されるタグ設定画面が表示されます。入力欄で自由に入力できます。選択ボタンタップで、他の製品で入力済みの一覧が表示され、選択することもできます。使用しない場合は未入力でも構いません。
また、設定の「一般」-「タグを使用する」で、表示/非表示の切り替えができます。
編集ボタン
 
選択ボタン

⑨製品メモ

ご自由にご使用ください。

⑩価格追加、価格一覧、価格取得ボタン

この製品の価格の追加、価格一覧表示、ネットショップからの価格取得を行えます。
※価格追加は、価格一覧からも行えます。
※ネットショップからの価格取得は、設定の「一般」ー「製品情報取得」に設定されたサイトから価格を取得します。この設定で利用するサイトのみを設定してください。
また、製品のタイトルから数を自動判別しますが、必ずしも正しくありません。
あまりにも単価が安すぎる場合などは、価格のタイトルをご確認頂き、正しい数を入力してください。

△目次に戻る

6.画像拡大画面


画像を拡大表示できます。細かい文字などを確認する場合にご使用ください。

・指1本で移動できます。
・指2本で広げると拡大、狭めると縮小できます。
・指3本でタップすると元のサイズに戻ります。


△目次に戻る

7.価格入力画面



① メニュー

メニュー選択できる条件説明
トップ
底値チェック画面に戻ります。
保存せずに終了変更変更の場合、閉じると自動で保存しますが、本メニューをタップすると、保存せずに画面を閉じます。
保存新規追加価格情報を保存します。変更の場合、閉じると自動で保存します。
削除変更価格情報を削除します。
計算
最終価格、単価、最終ポイントを計算します。
※保存時に自動で計算しますので、入力後に確認したい場合以外は計算する必要はありません。
比較
開いている価格を1つ目として比較画面を表示します。

②価格名

自由に入力してください。入力しなくても問題ありません。

③数

数を入力します。例えば、2個パックで売っている場合は、2とします。

④価格、税込

税抜価格か税込価格を入力します。どちらか一方を入力すればよいです。

⑤追加ポイント

お店の基本のポイント以外に、この製品だけにボーナスポイントがある場合に入力します。

⑥追加ポイント(%)

お店の基本のポイント以外に、この製品だけにボーナスポイント(%)がある場合に入力します。

⑦お店

お店を手入力、または、選択します。

⑧最終価格

お店の基本ポイントと追加ポイントを加味した最終的な価格を表示します。

⑨単価

最終価格を容量、数で割った単価を表示します。

⑩最終ポイント

お店の基本ポイントと追加ポイントの合計を表示します。

⑪チェック日付

価格をチェックした日付を入力してください。
カレンダーから選択するか、今日ボタン、明日ボタンで入力できます。


△目次に戻る

8.価格一覧画面





①メニュー 

メニュー説明
トップ底値チェック画面に戻ります。
検索登録済みの価格の検索画面を表示します。
比較選択した価格情報を1つ目、2つ目に設定した比較画面を表示します。


②タブ

選択肢説明
ネットショップ以外手入力した価格一覧です。
ネットショップ入力画面の価格取得ボタンで取得したネットショップの価格一覧です。
全て上記、全ての一覧です。


③選択モード切り替えと並び替え

(ア)選択モード切り替え
選択モードに切り替えて、複数選択して削除ができます。

(イ)並び替え順序切り替えボタン
並び替え順序を変更します。▼が降順、▲が昇順です。
タップするたびに、▼→▲と変化します。

(ウ)並び替え項目切り替えボタン
並び替え項目を変更します。単価や価格、チェック日付、お店、更新日付で並び替えが行えます。
タップするたびに、変化します。

(エ)並び替え項目選択ボタン
並び替え項目の選択画面を表示します。

④価格の一覧

価格の一覧を表示します。③で並び替えができます。

⑤追加ボタン

価格入力画面が表示され、価格を追加できます。


△目次に戻る

9.Web検索画面

製品情報をWeb検索します。




①メニュー

・実行
入力したキーワード、EANを検索条件としてWeb検索を実行します。

・キャンセル
Web検索を実行中にタップできます。実行をキャンセルします。

・クリア
入力した検索条件をクリアします。

・前回実行結果
前回の検索結果を表示します。

②サービス

Amazonと楽天のどちらかか両方を選択します。

③取得ページ数

取得するページの限度を指定できます。楽天は1ページ当たり30件、Amazonは10件です。
例えば、楽天で「3」と設定すれば、最大で90件までしか取得しません。


△目次に戻る

10.検索結果

Web検索の実行、または、前回実行結果で、表示されます。



①メニュー

メニュー説明
トップ底値チェック画面に戻ります。
ヘルプ本ヘルプが表示されます。

②選択モード切り替え

複数選択して、保存や非表示ができます。操作方法は、底値チェック画面と同じです。

③製品をタップ

製品をタップすると、入力画面が表示されます。入力画面でも「保存」ができます。



△目次に戻る


11.比較




容量や数が異なる2つの価格の単価を比較します。
1つ目、2つ目の価格、容量、数を入力後、実行をタップしてください。

容量は単位を揃えてください。
例えば、ジュースの1.5リットルと500ミリリットルを登録する場合、1500ミリリットル、500ミリリットルと入力します。

は、2個パックで売っている場合は、2とします。

それぞれの単価が計算され、安い方が分かります。



△目次に戻る

画面の下部に表示されるバナー広告を非表示にすることができます。
底値チェック画面のメニューの「動画広告視聴」をタップすると以下の画面が表示されます。




「動画をロード中です。しばらくお待ちください。」と表示されている間は、「視聴する」がタップできませんので、しばらくお待ちください。
「動画をロード中です。しばらくお待ちください。」が消えましたら、「視聴する」をタップしてください。
動画を途中で停止しますと、広告非表示期間の報酬は得られません。

上の画像のように広告非表示期間が表示されます。続けて視聴した場合、広告非表示期間に加算されます。
広告非表示期間は、実際に広告を非表示にする時間になります。本アプリを表示していない時間は含みません。


△目次に戻る


13.設定

①一般

(ア)アイテム編集

・大分類編集
登録されている大分類が一覧で表示され、並び順変更や、編集、削除ができます。


・お店編集
登録されているお店が一覧で表示され、並び順変更や、編集、削除ができます。
編集では、ポイント情報を設定できます。
メニューの「未使用削除」は未使用のお店を削除します。
※お店は大分類やタグは未使用のものはその都度自動で削除していますが、お店は負荷考慮のため手動で消してください。


・タグ編集
登録されているタグが一覧で表示され、編集、削除ができます。

(イ)Web設定

・製品情報取得
バーコード読み込み時に、取得するサイトのAmazon、楽天の優先順を設定します。
例:Amazon、楽天
例:Amazon

(ウ)使用設定

使用しないに設定した場合、各画面で表示されません。

・購入予定を使用する
購入予定を使用するか設定します。

・タグを使用する
タグを使用するか設定します。

(ウ)表示設定 

・タブ設定
底値チェック画面のタブ(横並びのグループ)の順番や表示、非表示が設定できます。

・各大分類を表示
底値チェック画面のタブに登録済みの大分類の表示、非表示を設定できます。


・メイン画面と検索結果画面の画質
底値チェック画面と検索結果画面で表示される画像の画質のレベルを設定できます。
高、中、低から選択してください。

・メイン画面の文字サイズ
底値チェック画面の文字サイズを変更できます。
最小、小、中、大から選択してください。

(エ)その他

・税率(%)
税率が変わった場合に設定してください。

・テーマ
ライト、ダーク、システムのデフォルトから選択できます。

②キャッシュ

底値チェック画面、入力画面の画像表示でキャッシュを使用するかどうか設定します。

キャッシュを使用しない場合、画像はその都度ダウンロードすることになり、ディスク容量は消費しません。ネットが接続してない場合は画像が表示できないことになります。通信量は増えます。

キャッシュを使用する場合、画像は最初の一回のみダウンロードし、キャッシュエリアに保存するため、ディスク容量を消費します。通信量を節約できます。


△目次に戻る

③バックアップ

トップの画面のメニューの「設定」の「バックアップ」をタップすると、本画面が表示されます。
後述(ア)~(エ)は、Google Driveに、(オ)、(カ)はスマホ内にバックアップします。

(ア)Googleアカウント、権限

バックアップ機能を使用するには準備する必要があります。
Googleアカウントの「設定」ボタンをタップして、アカウントの選択を行ってください。
次に、権限が許可されていない場合は、「許可」ボタンをタップして、「Google Drive上の特定のファイルのみの参照等」の許可を行ってください。
アカウントを変えたい場合は、Googleアカウントの「クリア」をタップしてから、再度、設定を行ってください。

(イ)バックアップ実行

バックアップを実行します。
本画面内の「直近のバックアップ結果/状態」に結果が表示されます。
「実行終了を通知」で、通知の表示切替ができます。

通知のありなしに関わらず、結果はログ画面にも表示されます。
Android13以降では通知の権限の許可が必要になります。
メニューの「本アプリの通知の設定」から表示されるAndroidの設定でも通知の表示切替ができます。

(ウ)自動バックアップ設定/解除

自動バックアップを設定すると、毎日、指定した時刻に変更の有無をチェックし、変更があれば、バックアップを行います。

「実行終了を通知」については(イ)と同じです。

バッテリーが少ないときに実行してしまわないように、充電中でバッテリーが20%以上のときに実行します。

(エ)復元実行

本ボタンをタップすると、バックアップ一覧が表示されますので、復元したいデータを選択してください。なお、現在のデータは消えますので、ご注意ください。

(オ)端末内バックアップ実行

Google Driveではなくスマホ内にバックアップを行います。
後述の【補足】のために追加した機能です。

(カ)端末内復元実行

Google Driveではなくスマホ内のバックアップファイルから復元します。
後述の【補足】のために追加した機能です。


【補足】以前のバージョンで保存していたバックアップで復元したい場合
Google Drive側の仕様変更により、以前のバージョンで保存していたバックアップが本アプリからは見えなくなりました。それらのバックアップで復元する方法です。

(1)「Googleドライブ」アプリでバックアップをスマホ内にダウンロードします。
マイドライブの「com.bnbnapp.bottomprice」フォルダ内の日付フォルダ(例:「2021/01/01 03:00:15」)内の「backup.zip」です。
(2)本アプリのバックアップの「端末内復元実行」ボタンをタップします。
(3)前述の①でダウンロードした「backup.zip」を選択します。


△目次に戻る

2018年10月1日月曜日

再びEditTextのメモリリーク

こんにちは。

以前にもEditTextでメモリリークを発見し対応したのですが、その後のライブラリのアップデートで改善されていました。

参考記事:「メモリリーク その4 EditText

しかし、再び、別の原因によるEditTextのメモリリークが発生しました。

メモリリークが発生する場合と発生しない場合があり、しばらく気付かなかったため、どのライブラリから発生するのかは分かりません。

前回と同様、LeakCanaryで発見しました。

端末:Xperia performance
OS:Android 8.0.0

LeakCanaryより↓
In com.bnbnapp.bookshelf:3.13:3064.
* com.bnbnapp.bookshelf.ConditionActivity has leaked:
* GC ROOT static android.view.accessibility.AccessibilityNodeInfo.sPool
* references android.util.Pools$SynchronizedPool.mPool
* references array java.lang.Object[].[32]
* references android.view.accessibility.AccessibilityNodeInfo.mOriginalText
* references android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence.mSpanned
* references android.text.SpannableStringBuilder.mSpans
* references array java.lang.Object[].[0]
* references android.widget.TextView$ChangeWatcher.this$0
* references android.support.v7.widget.AppCompatEditText.mContext
* leaks com.bnbnapp.bookshelf.ConditionActivity instance
 
こちらの対応は以下。

上記対応すると以下のメモリリークを検出しました。

LeakCanaryより↓
In com.bnbnapp.bookshelf:3.13:3064.
* com.bnbnapp.bookshelf.ConditionActivity has leaked:
* GC ROOT static android.view.accessibility.AccessibilityNodeInfo.sPool
* references android.util.Pools$SynchronizedPool.mPool
* references array java.lang.Object[].[5]
* references android.view.accessibility.AccessibilityNodeInfo.mOriginalText
* references android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence.mSpanned
* references android.text.SpannableStringBuilder.mFilters
* references array android.text.InputFilter[].[0]
* references android.widget.Editor$UndoInputFilter.mEditor
* references android.widget.Editor.mProcessTextIntentActionsHandler
* references android.widget.Editor$ProcessTextIntentActionsHandler.mContext
* leaks com.bnbnapp.bookshelf.ConditionActivity instance
 
こちらの対応は以下。

以上で、メモリリークは検出されなくなりました。

2018年6月21日木曜日

DELLの前面にさしたイヤホンから音が出ない

こんばんは。

Androidのアプリ開発はDELLのマシン(Windows10)で行っていますが、Windows Update後、前面のイヤホンジャックにさしたイヤホンから音が出なくなりました。

本気で直そうとはしていなかったのですが、今日、たまたま解決しましたので、記事にしておきます。

タスクバーの「Dell Audio」を右クリックして、「サウンドマネージャー」をクリックします。


(スタートメニューにも「Dell Audio」がありました。)

起動したDell Audioの「詳細」-「ジャック情報」を開きます。


ここまでは、何度も来ました。この画面では何もできないなと思っていたのですが、違いました。

「フロントパネル」の下の黒い●がクリックできるのです!






これをクリックすると、以下の選択画面が表示されます。


私の場合は、「マイク入力」が選択されていましたので、「ヘッドフォン」を選択しなおしました。

これで、無事、イヤホンから音が出ました。


本当に、分かりにくい・・・。


2018年6月9日土曜日

Style.xml内の「Theme」が赤字

おはようございます。

build toolsを3.1.0から上げると、Style.xml内の「Theme」が赤字になってしまいます。

Go To Declaration(Ctrl+B)で宣言部分に飛ぶことはできます。

なのに、たしか、「Cannot resolve symbol」となっているのです。

どうしても解決できず、保留にしていました。

現在、3.1.3まで上がっているにも関わらず、同じ現象になってしまいます。

もう、このままにしとくわけにはいかないため、再調査をして、ようやく解決しました。

方法は簡単です。

1.Android Studioのメニューの「File」-「Close Project」でプロジェクトを閉じます。

2.「Welcome to Android Studio」画面の「Import project」をクリックし、該当プロジェクトをインポートします。

これで、エラーが消えました。


Syncで「Failed to resolve: common」

おはようございます。

キャッシュをクリアしたところ、Syncでエラーとなるようになりました。


エラーの内容は、上の画像のように「Failed to resolve: common」と出るだけで、さっぱり分かりません。

「common」という自作ライブラリを使っていたので、自作ライブラリのせいかと思って調べていたのですが、どうも違います。

そして、ようやく判明しました。

Projectレベルのbuild.gradleは以下のようになっていました。

上記2か所の「jcenter()」と「google()」を逆にするとエラーが消えました。


理由は分かりません。こんなところで時間掛けられないので、理由までは調べません。

2018年5月22日火曜日

「Method '***' is too complex to analyze by data flow algorithm」

こんにちは。

久しぶりの更新です。

一通りコーディングが終わると、Android Studioのメニューの「Analyze」ー「Inspect Code」で、コードをチェックしています。

色々、チェックに引っかかった項目が出てくるのですが、初めて以下の項目が出ました。

「Method '***' is too complex to analyze by data flow algorithm」

'***'の部分は関数名です。

関数が複雑すぎると言われているみたいですが、しばらく原因が分からず放置していましたが、ようやく判明しました。

私の場合は、関数の行数が長すぎたようです。該当関数を二つに分けたところ、解消しました。


そもそも、関数は、コードの見やすさの観点からある程度の長さ以内になるようにしています。

ところが、この関数はエラー処理を後から何度も追加していったところ、長くなってしまいました。(コメント行を含め、238行もありました。)

複雑なアルゴリズムを組んでも、同じ警告が出るのかもしれませんが、行数が長くて警告する場合は、そう警告してもらいたいものです。

以上です。

2018年1月19日金曜日

メモリリーク その4 EditText

こんにちは。

現在までに発見したメモリリークの最終記事です。


compileSdkVersionを26に上げたところ、LeakCanaryでメモリリークを検出しました。

検出端末は、Xperia performanceです。

そのときのLeakCanaryのスクリーンショットが以下です。


LeakCanary

InputConnectionWrapperのmTargetが解放されないようです。

よって、上記が解放されるように対応しました。

まず、EditTextの代わりに自作のMyEditTextを用意しました。
次に、InputConnectionWrapperも自作し、closeConnectionでmTargetをnullにします。

以上により、メモリリークは検出されなくなりました。


2018年1月17日水曜日

何度目かの禁煙

おはようございます。

久しぶりの更新です。今日はまだ5日目ですが、禁煙についてです。

大人になってから、ずっとタバコを吸ってきました。

しかし、今、以下の理由から禁煙を決意しました。



禁煙する理由①:えずく

最近、喫煙が体調不良をもたらすようになっているような気がしてきました。

毎日、何回もえずくのです。実際に吐いてしまう事もありました。

他の疾患で病院にかかるときに、えずく事も相談するのですが、特に取り上げてくれません。

逆流性食道炎で、ストレスからきているのかと勝手に思っていました。

しかし、現在、ストレスから解放されているにもかかわらず、えずきは、変わりません。

引き続きネットで検索して調べていたのですが、タバコが原因として考えられるかもしれないと知りました。

禁煙する理由②:舌炎

ここ2、3年、よく舌炎になります。特に偏った食生活をしているわけではありません。

舌炎は、口内炎よりつらいです。本当に食べられなくなります。


これも、タバコも原因の一つと考えられるという情報をネットで得ました。

また、舌炎があるときは、タバコすら痛いです。

禁煙する理由③:金銭問題

タバコは2日で1箱くらいのペースで吸っていました。

1箱400円ですから、1ヶ月で6,000円。

1年で72,000円。

5年で360,000円。

10年で720,000円。

20年で1,440,000円

30年で2,160,000円

物凄く勿体ないですね。

また、タバコは、どんどん値上がりするでしょうから、負担額はもっと増えます。

禁煙する理由④:喫煙場所

都心に出ると喫煙場所がありません。

よく行く有楽町なんかは、喫煙所がある場所をおさえています。

しかし、近年、喫煙所がどんどんなくなってきています。

試写会とかで有楽町以外の都心にも行ったりするのですが、喫煙所がなかなか見つけられません。

禁煙グッズ

タバコを吸いたくなったときに、ガムや飴でごまかすのは虫歯や舌炎が怖いので、ニコチン、タールを含まない電子タバコを試しています。

VP slimという電子タバコです。

タバコを吸いたいという衝動に襲われたら、この電子タバコを吸っていますが、結構、吸いたい気持ちをごまかせられています。

使い捨てで、2、000円くらいで500回吸えるそうです。

味は6種類あり、今回はロイヤルピュアベリーを買いました。

使い捨てじゃない電子タバコよりも安いので、試しやすいですね。

ビックカメラのポイントが少し残っていたので、ビックカメラで買いましたが、Amazonでも売っています。



また、楽天でも売っています。

価格:2,030円
(2018/1/17 10:21時点)
感想(0件)


今度こそ、禁煙できるといいなと思っています。