2016年12月26日月曜日

AdSense登録について

こんにちは。

12記事で、再審査を依頼したところ、AdSenseの審査通りました。
AdMobも復活しました。

とりあえず、ほっとしました。

2016年12月22日木曜日

非同期処理について・・・AsyncTaskLoader

こんにちは。

非同期処理のAsyncTaskについて、以前書きました。 今日は、非同期処理AsyncTaskLoaderについて書きます。
AsyncTaskLoaderは、画面の表示設定などのメインスレッドで動作させる処理とバックグラウンドで行いたい処理を分けることができます。


まずは、Activityから見ていきます。
メインスレッドで動作する部分です。


Activityを、「implements」します。
そして、onCreateLoaderとonLoadFinishedをOverrideします。onCreateLoaderで、Loaderクラスを引数を渡してnewします。
onLoadFinishedで、引数で渡されるデータからデータを取得し、画面に設定します。


次に、LoadLoaderクラスを作成します。

コンストラクタで、引数を渡し、loadInBackgroundで、非同期処理を実行します。


非同期処理の実行は、以下のようにします。

最後に、Loaderの破棄が必要です。


2016年12月21日水曜日

ドコモあんしんスキャンについて


こんばんは。

先週の土曜日くらいに、突然、開発中のアプリがドコモあんしんスキャンで、「PUP」として検出されました。 「PUP」とは、不審なプログラムのことで、自己増殖や破壊活動をするプログラムのことだそうです。

ドコモあんしんスキャンのログを見ると、「パッケージ〇〇〇がAndroid/Agent.NG!pkgとして検出されました。」と出力されています。

簡単なHello Worldのテストアプリでも、PUPとなってしまいます。


なにも思い当たる節がありません。

・・・調査に2日くらい費やしてしまいました。

原因は、build.gradleで「com.android.tools.build:gradle:2.2.3」を使用しているから、みたいです。

「2.2.2」に戻したら、PUPと検出されなくなりました。
いつ、「2.2.3」に上げたのか、覚えていないです。 ドコモあんしんスキャンが対応するか、gradleが対応するまで、「2.2.2」で開発しようと思います。


本当につまらないことで、はまってしまい、禁煙中も重なり、イライラしました・・・。

あんしんスキャンなんて、アンインストールしたいところですが、開発する側としては、今回のようなことがないか、テストしていかないといけません。



2016年12月16日金曜日

非同期処理について・・・AsyncTask

こんにちは。

お買い物電卓のネタはそろそろなくなってきました。今日からは、現在作成中のアプリで勉強したことを書いていきます。

まずは非同期処理についてです。
Androidでは、DB読み込みなどの重い処理をメインスレッドで行うと、応答なしエラーとなってしまいます。その為、重たい処理は、別スレッドで行う必要があります。

AsyncTask


例です。
Asynctaskのサブクラスを作成します。宣言時に型引数を、実行時に渡すパラメータ、進捗として渡すパラメータ、処理の結果の順に指定します。この例では進捗に関しては省略しています。
まず、コンストラクタで、イメージビューを内部変数に設定しています。
onPreExecuteは、メインスレッドで動作し、事前準備を行いますが、今回は特に記述していません。
そして、doInBackgroundに、バックグラウンドで行いたい処理を記述します。
最後に、onPostExecuteも、メインスレッドで動作しますので、イメージビューにBitmapを反映させています。


呼び出し側を以下のようになります。
API level 11からは、executeOnExecuter(AsyncTask.THREAD_POOL_EXECUTOR, imageUrl)とするようです。


このように、AsyncTaskでは、メインスレッドとバックグラウンド、それぞれで行いたい処理が混在してしまいます。そこで、それらを分離したものがAsyncTaskLoaderです。AsyncTaskLoaderについては、次回以降に書こうと思います。



2016年12月14日水曜日

JAVAのBigDecimalについて

こんにちは。
間が空いてしまいました。こんなことでは、AdSenseの審査通りませんね。

今日は、JAVAのBigDecimalについて書きます。

お買い物電卓でも使用しています。電卓のように正確な値を扱いたい場合に使用します。
切り捨て、切り上げ、四捨五入などの指定をできます。

値を設定するには、コンストラクタに値を渡して設定するか、”valueOf”を使用します。

足し算をしてみます。



引き算の場合は、”subtract”、掛け算の場合は、”multiply”、割り算の場合は、”divide”となります。

割り算の場合、有効桁数を指定する必要があります。小数点以下5桁で切り捨ての例です。



割り算で、無限小数になる場合は、この丸めを指定しないと例外となってしまいます。
切り捨ての他に、切り上げや四捨五入なども指定できます。詳しくはjavadocを参照ください。

また、掛け算で、有効桁数を指定したい場合は、以下のようにします。



BigDecimalから値を取り出したい場合は、”toString”や、”intValue”などで取り出します。

以上となります。

2016年12月6日火曜日

ボタンエフェクトripple

こんにちは。

ボタンエフェクトのrippleについて書きます。

前述の入門書「Androidアプリ開発入門」で、波紋のように広がるRipple Effectを薦めていました。私はあまりRipple Effectを使ったアプリに触れたことがなかったのですが、薦めていたので勉強がてら使ってみることにしました。

価格:2,970円
(2016/12/5 19:04時点)
感想(1件)



res\drawableフォルダの下に以下のようなnumber_button_background_ripple.xmlファイルを作成します。



activity.xmlのボタンのbackgroundに作成したxmlを指定します。

これで、クリックしたときに、波紋のように広がるようになります。

しかし、rippleは、API level 21以上です。Android開発初心者の私は、それをすっかり忘れていて、エラーになってしまいました。


エラー内容:
android.view.InflateException: Binary XML file line #231: Error inflating class Button


少しはまりました。
API level 21未満の場合は、別のdrawableファイルを使用するようにしました。


res\drawable-v21フォルダの下に以下のようなnumber_button_background_ripple.xmlファイルを作成します。
フォルダが別で、ファイル名は同じです。


これで、21以上の場合は、ripple効果が適用され、21未満では、適用されないようになります。
ちょっと感動したのですが、フォルダを分けて、それぞれのAPI levelで実行されるのって、素晴らしい機能ですね。

2016年12月5日月曜日

テキストのスクロール

こんにちは。

今日は、簡単ですが、テキストビューのスクロールについて書きます。

お買い物電卓の計算結果の下の計算式で使用している横スクロールです。
activity.xmlを以下のようにしました。

HorizontalScrollViewの中にTextViewを置きます。これだけで表示文字数が多くなると横スクロールできるようになります。


あるタイミングで、自動的に表示位置を調整したい場合は、以下を実行します。

お買い物電卓の計算式の場合は、右端にスクロールするようにしました。

2016年12月2日金曜日

AdSense登録について、続報

こんにちは。

前回の記事にAdSenseへの登録を書きましたが、まだ足りませんでした。審査が始まってすらいませんでした。
毎日、まだかまだかと待っていたのですが・・・。

前回の記事から実施したことを記載していきます。
AdSenseにログインして、その他の設定(?うろ覚えです)で、ブログに埋め込むHTMLを取得します。そのHTMLをブログのHEADの直後に貼り付けます。

そのままだと、XMLがエラーとなり、保存できないので、<script async ~>の部分を、<script async='async' ~>に変更します。

その後、AdSenseで設定完了みたいなボタンをクリックすると、審査が開始されます。

審査は二日ほどで完了しました。結果は・・・不承認です。
理由は、不十分なコンテンツということで、まだまだ記事が足りなかったようです。

もっと記事を書いてから、再チャレンジしたいと思います。

AdSenseが不承認となると、AdMobも無効となってしまいました・・・。