AndroidのTextView、ListViewの使い方まとめ
- 2011年 8月23日
- 投稿者 : ino
Androidで正規表現を使っていて、全角のパターンマッチで少しはまったのでメモ。
Javaでは他の正規表現エンジンと同様、POSIX文字クラスが利用できます。
if("Hello".match("^\\p{Alpha}+$")){
System.out.println("アルファベットだけ!");
}
Android開発をしていて、ある時からアプリのデバッグ起動で次のようなエラーが出て固まるようになりました。
[2011-08-03 19:14:42 - com.example.testapp] ------------------------------
[2011-08-03 19:14:42 - com.example.testapp] Android Launch!
[2011-08-03 19:14:42 - com.example.testapp] adb is running normally.
[2011-08-03 19:14:42 - com.example.testapp] Performing com.example.testapp.First activity launch
[2011-08-03 19:14:42 - com.example.testapp] Automatic Target Mode: using device 'CB511J0W90'
[2011-08-03 19:14:42 - com.example.testapp] Uploading com.example.testapp.apk onto device 'CB511J0W90'
[2011-08-03 19:14:42 - com.example.testapp] Installing com.example.testapp.apk...
[2011-08-03 19:14:45 - com.example.testapp] 成功!
[2011-08-03 19:14:45 - com.example.testapp] Starting activity com.example.testapp.First on device CB511J0W90
[2011-08-03 19:14:45 - com.example.testapp] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.testapp/.First }
[2011-08-03 19:14:45 - com.example.testapp] Attempting to connect debugger to 'com.example.testapp' on port 8610
[2011-08-03 19:14:45 - com.example.testapp] Launch error: リモート VM に接続できませんでした
ポート8610番につなげない、と言われているので調べてみる。
C:\>netstat -an -p tcp ~略~ TCP 127.0.0.1:8600 0.0.0.0:0 LISTENING TCP 127.0.0.1:8601 0.0.0.0:0 LISTENING TCP 127.0.0.1:8602 0.0.0.0:0 LISTENING TCP 127.0.0.1:8603 0.0.0.0:0 LISTENING TCP 127.0.0.1:8604 0.0.0.0:0 LISTENING TCP 127.0.0.1:8605 0.0.0.0:0 LISTENING TCP 127.0.0.1:8606 0.0.0.0:0 LISTENING TCP 127.0.0.1:8607 0.0.0.0:0 LISTENING TCP 127.0.0.1:8608 0.0.0.0:0 LISTENING TCP 127.0.0.1:8609 0.0.0.0:0 LISTENING TCP 127.0.0.1:8610 0.0.0.0:0 LISTENING TCP 127.0.0.1:8612 0.0.0.0:0 LISTENING TCP 127.0.0.1:8613 0.0.0.0:0 LISTENING TCP 127.0.0.1:8614 0.0.0.0:0 LISTENING TCP 127.0.0.1:8615 0.0.0.0:0 LISTENING TCP 127.0.0.1:8616 0.0.0.0:0 LISTENING TCP 127.0.0.1:8620 0.0.0.0:0 LISTENING TCP 127.0.0.1:8621 0.0.0.0:0 LISTENING TCP 127.0.0.1:8622 0.0.0.0:0 LISTENING TCP 127.0.0.1:8623 0.0.0.0:0 LISTENING TCP 127.0.0.1:8624 0.0.0.0:0 LISTENING TCP 127.0.0.1:8626 0.0.0.0:0 LISTENING TCP 127.0.0.1:8627 0.0.0.0:0 LISTENING TCP 127.0.0.1:8629 0.0.0.0:0 LISTENING ~略~
と(やたらLISTENしているポートが多いのが気になるものの)ちゃんと開いているように見える。
ポートが空いてるのは確認できたが、firewallの影響を受けているかもしれないのでさらにしつこくjdbデバッガで調べてみる。
C:\>jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8610 uncaught java.lang.Throwable を設定しました 保留した uncaught java.lang.Throwable を設定しました jdb の初期化中です... >
問題なくつなげたので一旦quitを入力して終了。
これで繋げなければJava VM側やネットワークの問題の可能性がありましたが、
これで原因はEclipseの可能性が高いということに。
改めてEclipseの設定を確認すると…
一般 → ネットワーク設定 → プロキシーのバイパスでプロキシが設定されていて、しかもlocalhost, 127.0.0.1 のプロキシが有効になってしまっていました。
これじゃ繋がるわけないわな。
アクティブ・プロバイダーが「ネイティブ」になっていて変更できなかったため「直接」に変更した上で上記2つのチェックを外した所無事解決。
Google Analytics でGoogle +1 やFacebookの「いいね!」、Twitterの「ツイート」ボタンアクションをトラッキングする方法が公開されてはてなで話題になっているようなので、これを有効にするだけのWordPressプラグインを作ってみました。
Google Social Analytics Extension(extends your Google Analytics)
これ自体はGoogle Analyticsやソーシャルボタンを含んでいません。他のプラグインのお供に。
併せて使うと便利なおすすめプラグインはこちら。
WebView でリダイレクトではなくユーザクリックのみを飛ばしたい場合、
下記のようにするといいようです。
<pre><code>mWebView.setWebViewClient(new WebViewClient() { </code></pre>
<pre> public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(view.getHitTestResult().getType() > 0){
// ユーザが自分でクリック参照したページ
return true;
} else {
// クリックされなかったのでリダイレクトとみなす。
return false;
}
}
<span class="Apple-style-span" style="font-family: monospace;">}</span></pre>
ChromeでホームページをiGoogleにしているのですが、最近頻繁にクラッシュするようになったので対応方法を調べてみました。
ヘルプセンターの「iGoogle が正しく動作しない」という記事によると、下記を1つずつ試していくとよさそうです。
順番に試していき、Google Reader, Gmail 周りのガジェットで固まるのが気になっていたので5の手順でガジェットを消した所でちゃんと動作するようになりました。
普段、ブラウザとしてGoogle Chromeを使っています。ですがバージョン12になったあたりからやたらと重くなってきました。確認環境はWindows XP, Windows Vista(いずれも32bit)です。
バージョンアップのせいだけでなく、Google+がリリースされた影響や、検索キーワード入力中に動的に検索を行うようになった影響もあるかもしれません。
大抵はタイムアウトしたりフリーズしても再読み込みをすれば直りますが、Googleマップの経路検索だけは何度やっても結果検索が出なくなったのには困った・・・
原因を調べたところ、どうやら chrome://flags の「GPU Accelerated Canvas 2D」機能が悪さをしているらしく、該当の機能を無効にして再駆動すると問題なく動くように。
chrome://flags の設定は試験運用版の機能のため、全てデフォルトでオフになっていますが、Chromeを使っていて不安定になった時は、拡張機能を見直すのももちろんですが、一度chrome://flagsにも余計な機能がオンになっていないかチェックしてみるといいかもしれませんね。
Pure-FTPd を使っていると、WordPress (3.0以降?)のweb管理コンソールからのプラグイン更新やインストールなどが機能しないようです。
define(“FTP_METHOD”,”ftpsockets”); としている場合、
Downloading update from http://downloads.wordpress.org/plugin/akismet.2.5.2.zip…
Unpacking the update…
Warning: Invalid argument supplied for foreach() in /path/to/wordpress/wp-admin/includes/class-wp-filesystem-ftpsockets.php on line 299
Could not copy file. /path/to/wordpress/wp-content/upgrade/akismet.tmp/”
というエラーになり、
define(“FTP_METHOD”,”ftpext”); としている場合も別のエラーが出て失敗してしまいます。
フォーラムを探したところ、対応方法は
・suPHPを使って権限を変える(FTP_METHOD に ‘direct’を使う?)
・PureFTPd は諦めてProFTPdに乗り換える
の2通りに分かれている様子。
suPHPを使うと他のPHPスクリプトにまで影響が出てしまうため避けたい。
ということで、今回はPureFTPdとは別ポートで ProFTPd をインストールし、ProFTPd はローカルアクセス専用として配置することで対応しました。
最終的なwp-config.php の設定はこんな感じです。
define(‘FS_METHOD’, ‘ftpext’);
define(‘FTP_BASE’, ‘/path/to/wordpress/’); // FTPで見た時のWordPress設置フォルダのパス( / で終わる)
define(‘FTP_CONTENT_DIR’, FTP_BASE.’wp-content’);
define(‘FTP_PLUGIN_DIR’, FTP_BASE.’wp-content/plugins’);
define(‘FTP_USER’, ‘username’); // ProFTPdのログインユーザ名
define(‘FTP_PASS’, ‘password’); // ProFTPdのログインパスワード
define(‘FTP_HOST’, ‘localhost:2211′); // ポートに2211番を使用
参考:
- 3.0 Plugin Upgrade Bug? Could Not Create Directory
- Problem with PureFTPd & WordPress
- FTP Upgrade Fix プラグイン
- wp-config.php の編集(WordPress Codex)
既存のWindows環境を残しつつUbuntuを導入する場合、Ubuntu 公式の Windows インストーラ(Wubi)が便利です。
リンク先の「Run it with Windows」からダウンロードできます。
普通のWindowsプログラムのインストーラと同じようにインストールでき、アンインストール時も「プログラムの追加と削除」メニューから安全に削除できます。
- 参考:
WindowsXPでお手軽Ubuntu
Google I/O 2011 でもらった Samsung Galaxy Tab 10.1 LE について、はまったことのメモなど。
- Twitterアプリでログインできない。
公式twitterクライアント, twicca, TweetDeck など何を使ってもログイン出来ないという現象が発生していました(ブラウザログインなら可)。
原因は初回起動時の設定で時刻の自動同期をオフにしていたことです。明示的に時刻設定するのをやめて自動同期をオンにし、タイムゾーン設定だけすればアプリからもログインできるようになります。
初期化設定画面でしかこの設定を変えられないため、再設定には「設定→プライバシー→出荷時の状態に戻す」で、一度工場出荷時の状態に戻す必要があります。
参考URL: http://forum.androidcentral.com/samsung-galaxy-tab-10-inch/84410-google-io-edition-tab-10-1-cant-log-number-apps.html
- OS起動時に Fastboot USB download protocol でフリーズして何もできなくなった。
電源ボタンを押す時に、ボリュームボタンを押しているとファームウェア書き換えモード(?)に入るようで Upload Modeや Emergency Download Mode といった画面で固まってしまう事があります。
どのボタンを押しても無反応で、バッテリーも抜けない仕様のため八方塞がりの状態です。xdaフォーラムによると、電池切れを待って再起動しても同じ画面に戻ってしまうようです。
同フォーラムの情報を元に、下記のようにして解決しました。
1. Ubuntu Linux 環境を用意する。
2. fastboot をインストール。
Linux用 ia32バイナリをダウンロード
3. ia32-libs をインストール
Ubuntu の場合 Synaptics からインストールできます。
4. USBデバイス設定を行う
/etc/udev/rules.d/*.rules に samsung 用のデバイス設定を記述します。
/etc/udev/rules.d/51-android-samsung.rules
SUBSYSTEM==”usb”, SYSFS{idVendor}==”04e8″, MODE=”0666″
(イコール”=”は半角記号に直して下さい)
5. fastboot で工場出荷状態にリセットし、再起動。
※注意:fastboot -w で、端末中の全てのユーザデータが消えます。
fastboot -w
fastboot reboot
(5)で、fastbootの実行パス、権限が正しいにも関わらず、コマンドが見つからないとなる場合は ia32-libsがインストールされているか確認してみてください。
また、実行後「waiting for device」で固まる場合は端末がデバイスとして認識されていません。この場合はちゃんとUSB接続しているか、設定ファイルが正しいかを確認して下さい。
参考:
- Galaxy Tab 10.1 Hard Reset(xda)
- Using Hardware Devices(Android developers)
| 月 | 火 | 水 | 木 | 金 | 土 | 日 |
|---|---|---|---|---|---|---|
| « 8月 | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | ||||