WebView内で通信エラーでエラー画面表示さす
WebView内で通信エラーになった場合(net::ERR_CONNECTION_TIMED_OUT)、エラーページを表示さすようにハンドリング
#WebViewClient生成時に定義してあげる
○準備(既にassetsディレクトリがある場合は不要)
HTMLを置くassetsディレクトリを作成する。
AndroidStudioのプロジェクトのappを右クリック→[新規]→[New]→[Folder]→[Assets Folder]を選択。
app/src/main/asestsディレクトリが作成される。
また、build.gradleに以下のとおり追記する。(自動挿入されることもあるので、既にあったら編集不要)
android { sourceSets{ main{ assets.srcDirs=["src/main/assets"] } } ・ ・ ・
app/src/main/asestsにエラー画面のHTML(network_error.html)を配置して準備終了
○WebViewクラスにコーディング
次のとおりWebView生成時にオーバーラードして実装する。
WebView webView = (WebView) findViewById(R.id.webView); webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView webview, int errorCode, String description, String failingUrl) { if(errorCode < 0){ // 自作のエラーページを表示 webView.loadUrl(“file:///android_asset/network_error.html”); } }
参考URL
http://www.hangout.co.jp/blog/archives/148
http://stackoverflow.com/questions/4997677/android-webview-onreceivederror
http://growsic.com/blog/androidlocalhtml/
Andoridアプリの開発と本番の取扱をGradleでどうにかする
参考にしたサイトは以下。
https://firespeed.org/diary.php?diary=kenz-1824
Andoroidアプリ界隈で開発と本番は
開発=debug、本番=release
っぽいので以下はそれに則って記載する。
○一つの端末にデバッグバージョンアプリとリリースバージョンアプリを共存させたい
Module内にあるbuild.gradleを以下のとおり修正する。
buildTypes { debug{ applicationIdSuffix ".debug" } release { ・ ・ ・
ビルド時にデバッグバージョンアプリの時は、アプリIDに.debugがつくので、アプリバージョンIDがリリースバージョンと被らない=共存できる
○開発と本番で設定ファイルを切り替えたい。
以下のとおり設定ファイルを切り替えられる。
- 本番用定数
/src/main/res/values/strings.xml
<resources> <string name="app_name">Sample application</string> <string name="url">http://gati.net</string> </resources>
- デバッグ用定数
/src/debug/res/values/strings.xml
<resources> <string name="url">http://uso.net</string> </resources>
Javaのソースコード内で参照する際は普通にR.string.urlでOK。
WEBアプリのようにENVで切り替えられないのは少し不便。
Stringの文字列中に複数個の文字列が一個でも含まれている場合、continueする
Q.$taisyoStringの文字列中に"ダメ"または"いらない"文字が含まれている場合、continueするphpプログラムを書きなさい。
A.
phpの文字列検出系関数の中で一番処理効率がいいのはstrpos関数らしいのでできるだけそれを使う。
- 回答1.一番シンプルif文だけ
const DAME_MOJI="ダメ"; const IRANAI_MOJI="いらない" if(strpos($taisyoString, self::DAME_MOJI) !== false or strpos($taisyoString, self::IRANAI_MOJI) !== false){ continue; }
- 回答2.php5.6からconstでarray使えるようになったらしいからarrayで定義
const HUYOU_MOJIS = array("ダメ","いらない"); foreach(self::HUYOU_MOJIS as $huyouMoji){ if(strpos($taisyoString, $huyouMoji) !== false){ continue 2; } }
- 回答3.preg_matchで判断。一番短くてすむ
const HUYOU_MOJIS = "ダメ|いらない"; if(preg_match($taisyoString, self::HUYOU_MOJIS) === 0){ continue; } //もちろん3項演算子でも可
and etc...
AndoroidStudioのAVDのkvmに関わるエラーでハマった件
先の記事、「AndoroidのAVDのためにcpu-checkerしようとしたらmysql-serverがエラー」はそもそも以下のAndroidDeviceManagerでAndroid6.0の端末をクリックした際に以下のエラーメッセージが表示されたことから始まった。
KVM is required to run this AVD. /dev/kvm is not found. Enable VT-x in your BIOS security settings, ensure that your Linux distro has working KVM module.
ここにはkvmが無いとのことなのでkvmを以下のサイトを参考にインストール。
How to Install KVM and Create Virtual Machines on Ubuntu
egrep -c ‘(svm|vmx)’ /proc/cpuinfo sudo apt-get install qemu-kvm libvirt-bin bridge-utils virt-manager sudo adduser name libvirtd virsh -c qemu:///system list
ここまで記事通り。ただし、この後のCreating Virtual Machinesでまたエラーが発生。
[New VM]で新しい仮想環境を作ろうとしてもできなかった。Errorの内容は忘れてしまったが、とにかく「kvmを利用できません」みたいな内容だった。
以下のサイトを参考に調べると
KVM と /proc/cpuinfo の微妙な関係 | CUBE SUGAR STORAGE
BIOSのCPUの設定でVMを許可しなきゃいけないらしいのでBIOS起動。
ASUSの場合、BIOSの最初の画面はこんな感じ。
最初は簡易設定画面らしいので[Advanced Mode](詳細設定?)へ移動
[詳細設定]→[詳細]→[CPUの設定]→[Intel VT(Intel Virtualization Technology)]を[有効]に設定。
[退出]→[保存してリセットする]を選択して再起動。
改めてAndroidStudioを起動し、エミュレータを起動したら件のエラーは出なくなった。
AndoroidのAVDのためにcpu-checkerしようとしたらmysql-serverがエラー
AndoroidのAVDがうまく動かなく色々調べていたらcpu-checkerをインストールしたらいいらしいと各地の記事に書いてあった。が、何故かインストール時にエラーになる。
OSは先日Ubuntu14からアップデートしたUbuntu16.04LTS
sudo apt-get install cpu-checker パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下のパッケージが自動でインストールされましたが、もう必要とされていません: (中略) 以下の追加パッケージがインストールされます: msr-tools 以下のパッケージが新たにインストールされます: cpu-checker msr-tools アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 15 個。 2 個のパッケージが完全にインストールまたは削除されていません。 17.5 kB のアーカイブを取得する必要があります。 この操作後に追加で 87.0 kB のディスク容量が消費されます。 続行しますか? [Y/n] Y 取得:1 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu xenial/main amd64 msr-tools amd64 1.3-2 [10.6 kB] 取得:2 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu xenial/main amd64 cpu-checker amd64 0.7-0ubuntu7 [6,862 B] 17.5 kB を 1秒 で取得しました (14.3 kB/s) 以前に未選択のパッケージ msr-tools を選択しています。 (データベースを読み込んでいます ... 現在 1038687 個のファイルとディレクトリがインストールされています。) .../msr-tools_1.3-2_amd64.deb を展開する準備をしています ... msr-tools (1.3-2) を展開しています... 以前に未選択のパッケージ cpu-checker を選択しています。 .../cpu-checker_0.7-0ubuntu7_amd64.deb を展開する準備をしています ... cpu-checker (0.7-0ubuntu7) を展開しています... man-db (2.7.5-1) のトリガを処理しています ... mysql-server-5.7 (5.7.12-0ubuntu1) を設定しています ... initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: 接続を拒否されました insserv: warning: script 'binfmt-support' missing LSB tags and overrides insserv: Default-Start undefined, assuming empty start runlevel(s) for script `binfmt-support' insserv: Default-Stop undefined, assuming empty stop runlevel(s) for script `binfmt-support' Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details. invoke-rc.d: initscript mysql, action "start" failed. dpkg: パッケージ mysql-server-5.7 の処理中にエラーが発生しました (--configure): サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました dpkg: 依存関係の問題により mysql-server の設定ができません: mysql-server は以下に依存 (depends) します: mysql-server-5.7 ...しかし: パッケージ mysql-server-5.7 はまだ設定されていません。 dpkg: パッケージ mysql-server の処理中にエラーが発生しました (--configure): 依存関係の問題 - 設定を見送ります msr-tools (1.3-2) を設定しています ... エラーメッセージは前の失敗から続くエラーであることを示しているので、レポートは書き込まれません。 cpu-checker (0.7-0ubuntu7) を設定しています ... 処理中にエラーが発生しました: mysql-server-5.7 mysql-server E: Sub-process /usr/bin/dpkg returned an error code (1)
しばらくmysql事態触っていなかったので原因は不明。(Ubuntuのアップデート時に何かあったのかもしれない)
とりあえず現状のmysqlの状況を調べようと、とりあえずログインしようとしても以下のエラー。
mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
もちろんmysqldは動いていました。
埒が明かないので、以下のQAを参考に全部アンインストールしてから再インストールすることに。
(mysqlの中身が消えてもいい状況なので。もし消えたらこまる場合は安易に再インストールしないほうがいいですよ)
Ubuntu日本語フォーラム / MySQLが起動できなくなりました。
sudo apt-get remove --purge mysql-server* mysql-common sudo apt-get autoremove sudo apt-get install mysql-server
以下のコマンドでmysqlに繋がるようになり
mysql
無事cpu-checkerも正常に動くようになりましたよ。