アーカイブ | Uncategorized RSS for this section

FragmentでAsyncTaskLoaderを使ってみる

ネットワーク経由でJSONファイルを取得する実装をしてたんですが、ネットワークアクセスのpermissionも設定しているのになぜか例外投げられてうまく動かなかったんですが、そういえばHoneyComb以降では、ネットワークアクセスをする場合、UIスレッド以外からという制約ができていて、それを回避するためにはAsyncTaskを使わないとダメですよという話を前に聞いたなーと思ったんで、AsyncTaskでネットワークアクセス部分を実装してみました。

しかし、受け取った内容をDBにいれてListViewにセットしたAdapterの更新どうすんだろうとしばらく悩んでたところ、AsyncTaskLoader使うと処理終わったときにUIスレッド側のcallbackメソッド呼べますよっていう話なんで、その方が楽そうなのでそっち使ってみることにしました。

まずは、いままで使っていたクラスの変更を。

extends AsyncTask<?,?,?>

になっているところを

extends AsyncTaskLoader<?>

に書き換え。

loadInBackgroundの引数は必要なくなるので削除。onStartLoadingが必要になるので追加。

loadInBackgroundで使っていた引数は、コンストラクタに引数で渡してメンバー変数に変更。

Fragment側にimplements LoaderCallbacks<?>を追加すれば、Eclipseの補完機能(unimplemented methodsとかいうアレ)で必要なメソッドのひな形が追加されるので、そこに今まであった処理(onLoadFinished)を移動。

onCreateLoaderには、AsyncTaskLoader用クラスのコンストラクタの呼び出しを書いて終わり。

 

このLoaderを呼び出す場合は、getSupportLoaderManagerを使うのでFragmentActivityを使うという説明を読んだけど、FragmentActivity使ってないし、Fragmentにはそんなメソッドがないのでダメなのかと思っていたら、getLoaderManagerというメソッドがあったので気にせずこちらを使ってみたら問題なく動いている。あとでメソッドの説明文読んだら、いっしょの文章だったから、気にしないことにした。

 

getSupportLoaderManagerもgetLoaderManagerも。・・LoaderManagerを取ってくるメソッドだから当たり前かもしれないけど、どちらもinitLoaderが使えるので、

getLoaderManager().initLoader(int, Bundle, LoaderCallbacks<?>)

で呼び出せば、別スレッドで処理が走る。

 

処理が終わったらcallbackでonLoadFinishedが呼び出される。

受け取ったデータをDBにいれたら、CursorLoader.loadInBackgroundを呼び出して、mAdapter.swapCursorでCursorを更新すれば、ListViewも更新される、と。

 

これで動いているので、この件は一応の決着。

Ruboto

Rubotoは、Android上でRubyを使うための環境です。

https://github.com/ruboto/ruboto

まだ日本語環境というか、日本語の資料がないので、手始めにgithubのReadme.mdを日本語訳しました。


Ruboto – Ruby on Android

インストール方法


 

$ gem install ruboto

 

はじめに


Rubotoを使う前に準備が必要です。以下の準備をするといいでしょう。

  1. JDKがインストールされていなければJDKをインストールします
  2. JRubyインストール はとても簡単です。 rvm を使ったインストールもできます。
  3. Android SDKをインストールします。
  4. 環境変数 $ANDROID_HOMEにSDKの絶対パスを設定します。(Javaはチルダを展開しません)
  5. SDKのtoolsとplatform-toolsディレクトリを環境変数 $PATHに追加します。
  6. 実機で開発するのでなければ、Emulatorのイメージを作ってください。

概要


ruboto gen appのようにrubotoのコマンドラインツールを実行する場合、Rakefileは各アプリケーションフォルダのルートにおいてあるものとしています。

RakefileはJubyのrakeを実行するときに必要です。

 

コマンドラインツール


  • Application Generator(railsのapplication generatorみたいなもの)
  • Class Generator は、ActivityやBroadcastReceiver, Serviceなどの追加クラスを生成します。
  • Callback Generator は、Android APIのいろいろな部品で必要となるcallback用サブクラスを生成します。
  • Packaging task は、apkファイルにまとめます。
  • Deployment task は、できあがったapkファイルをエミュレータや実機に対してdeployします。
  • Updating Your Scripts on a Device(修正の度にコンパイルしなくても開発できます)

Application Generator

$ ruboto gen app --package com.yourdomain.whatever --path path/to/where/you/want/the/app --name NameOfApp --target android-version --min-sdk another-android-version --activity MainActivityName

Version番号は、必ず’android-‘とSDKレベルで指定します。(例: android-8 は froyo(2.2))

 

Class Generator

ruboto scriptと関連付いたJava classを生成します。(ActivityやServiceやBroadcastReceiverなど)

generatorは、一緒にテストスクリプトも生成します。

$ ruboto gen class ClassName --name YourObjectName

例)$ ruboto gen class BroadcastReceiver --name AwesomenessReceiver

 

Callback Generator

スクリプト内から、特定のAndroidAPIを操作できるようにするためのサブクラスを作ることができます。

rubotoからAndroidを処理するためのインターフェースが用意されたクラス一式を用意できます。

 

Ruboto 0.6.0からはもっと簡単にできるようになりました。interfaceやsubclassを用意する新しい方法は、WikiのGenerating classes for callbacks.の項を見てください。

 

Packaging task

apkファイルを生成します。

$ rake

apkファイルを生成して、実機やエミュレータへのインストールを一気にやるには次のようにします。

$ rake install

 

Deployment task

Playストアに公開する準備が整ったとしても、もう少しやることがあります。

まず、まだ署名用のキーファイルが手元に無いならば、keytoolを使って署名用のキーを作ります。

大抵の設定がデフォルトのままでいいならば、

$ ruboto gen key –alias alias_for_your_key

にオプションとして

–keystore /path/to/keystore.keystore

を指定して作りましょう。できたファイルは

~/.android/production.keystore

に保存されます。

このとき、keystore用と自分が使うキーのためにパスワードを聞かれます。この2つのパスワードは忘れないようにしてください。

キーはバックアップしておきましょう。(もし無くしてしまうとアプリケーションをアップデートしたときに古いバージョンからの更新ができなくなります)

 

キーの準備ができたら、

rake publish

として、playストアで公開できるapkファイルを作りましょう。

このとき、

RUBOTO_KEYSTORE

RUBOTO_KEY_ALIAS

という環境変数にkeystoreとkeyのaliasを設定しておきます。例えば、次のようにします。

$ RUBOTO_KEYSTORE=~/.android/production.keystore RUBOTO_KEY_ALIAS=foo rake publish

$ RUBOTO_KEYSTORE=~/.android/production.keystore

$ RUBOTO_KEY_ALIAS=foo

$ rake publish

それか、この2つの環境変数を~/.bashrcから登録するように設定して、rake publishを実行しましょう。できたapkファイルはplayストアへ!

 

Updating Your Scripts on a Device

従来の開発方法だと、ソースを変更すると再コンパイルして再インストールしないとダメでした。すげー遅いし、すげーだるい。

Ruboto使うと、スクリプトの変更をしてもJavaソースを更新しなくてもいいんです。Rubyスクリプトを書き換えただけだったら、次の呪文を唱えればいい。

$ rake update_scripts

そうすると端末にスクリプトの最新版がコピーされます。

ちゃんばらの時間がなくなっちゃってごめんね。

nowcompiling

※注意

Rubyスクリプトの変更のときだけ、使えます。もし、Javaソースを書き換えた(新しいクラスを作った場合などは、ソースが生成されます)とかXMLファイルを書き換えたときなどはスクリプトの再コンパイルが必要になります。

書き込み禁止ディレクトリに書き込むなどの場合は、root権限が必要になります。そういうときのテストに使える一番簡単な方法は、エミュレータで試すこと。端末で動かすには、root権限がいるでしょうけど。

GoogleDeveloperDay2011

11/1、待ちに待った(?)GoogleDeveloperDay2011がありました。

パシフィコ横浜だし、ドコモが例の端末を発表したし、2年前のアレがあるか!?なーんて甘い期待は

当然のごとく裏切られましたが、例年通り刺激的なイベントでした。

 

今年は、講演よりも展示物を見て回る方に時間を割きました。いろんな人たちがいろんなものを

作って展示しているのを見ると、なんだかんだ言ってもAndroidは自分たちで何かを作りたい人には

本当にいい環境なのだなあと思います。

ケータイ用OSとしての認知度が上がっていて、それにしか使えないと思っている人もいるかも

しれませんが、ケータイの枠にとらわれない発想のものもたくさんありました。

 

鏡とディスプレイを一体化して、スケジュールや天気などの情報を載せて朝の忙しい時間にも

確認しながら行動できる(?)ものやARを使って、山を見ると山の名前が画面内に表示されるような

アプリなど、「へー、そらたしかにおもしろいなー」なんてものが特に興味を引きました。

 

一通り展示物を見たあとは、ADKを使った展示物の部屋(OpenCall)にずっといたのですが、ここでは、

Android端末にちょっとしたハードウェアをからめた展示が行われていました。

 

これが本当にいろんなものがあっておもしろかったです。

ADKおもしろそうだけど、やるネタが思いつかないので見てるだけでもいいかなw

 

今年で5回目(しかも、日本は5年連続開催されてるそうな)ということですが、来年も行けるといいなー。

 

それとSサイズのTシャツとZeemote JS1 Hってやつをもらったので、ゲーム試してみたら意外と使えそう

だなーと思って開発者向けページから登録してSDKなんぞ手に入れてみました。

(ここの無料SDKいますぐダウンロード)

会員登録は必要ですが、名前とメールアドレスと居住国だけ登録すればいいので、興味がある方は

どうぞ。

よくわかるAndroidアプリ開発の教科書

無事、10/29に発売されました→Amazonのページ

詳細ページ / サポートページが公開されています。

フルカラー!

 

このブログの検索ワードにもたくさんあるセンサーの話をライブ壁紙にからめたサンプルなどもありますので、ぜひ読んでみてください。

 

関係ないですが、明日はGDD2011なので、基調講演を楽しみにしているところです。

050plusを試してみた

NTT.comの050plusのAndroid版がリリースされたということで、早速ダウンロードしてインストールしてみました。

起動すると紹介画面のような起動画面が出ます。

device-2011-10-02-120006

ここで、「お申し込みはこちら」を押すとGalaxyTabではこんな画面なのであきらめてました。

device-2011-10-02-120053

番号自体は、iPhone版をiPodTouchに入れて動かしてみたら問題なくうごきましたので取得できていたので、これで使えばいいかと思っていました。

その後、google+で「PCで設定して番号入れればいいのでは?」というアドバイスをいただいて、再度Androidアプリ側の紹介画面で戻るボタンを押してみたら、こんな画面が。

device-2011-10-02-120021

ダイアルパッド!

ここで、メニューボタンを押してみると設定という項目も出てきました。

設定項目を選ぶと…。

device-2011-10-02-120036

でました、メニュー。050 plusの初期設定を選んで番号とパスワードを設定したら、通知バーのアイコンが緑色になって無事使えるようになりました。

対応機種ではない場合、次のように何度か「対応してないけどいいんですか?」的なことは聞かれます。

自己責任で設定してください、ということでいいと思えば「同意する」にチェックをいれて続けるボタンを押しましょう。

device-2011-10-02-121012device-2011-10-02-121024device-2011-10-02-121037device-2011-10-02-121048

そんなわけで、050 plusが使えるようになりました。

無料DNSサービス Dozens に登録してみた。

Dozens という無料DNSサービスができたそうなので、早速登録してみました。

右側の赤いボタンを押すと登録画面になります。

snap240

dozens ID(ログイン用ID)とメールアドレス、パスワードを設定すると登録を有効にするメールが届くので、メールにあるリンクをクリックするとサービスが有効になります。

snap241

 

登録が終わったら、次はドメインを登録して使ってみます。


5つ(+1つ)のステップで使えるようになってます。

 

0.まず、利用するドメインに登録事業者側のDNSがドメインに設定されていないか確認しましょう。

登録事業者ごとに呼び方も違うかも知れないので、詳細はドメイン事業者のサイトで確認してください。

うちでは、Enomを使っているので、ManageDomainのDNS Server Settingというページから確認できます。

(Our ServersからCustomにするのも忘れずに!)

 

もしドメイン登録事業者のDNSを使っていた場合は、

  • ns1.dzndns.com
  • ns2.dzndns.com
  • ns3.dzndns.com
  • ns4.dzndns.com

に設定し直しましょう。

こうしておかないとDozens側のDNSを使うことができません。

この点、意外と忘れますので注意してください。

 

では、実際に設定していきます。

 

1.右上のログインからログインするとドメインの登録画面になります。Add a domainをクリックすればドメインの登録ができます。

snap242

 

2.ドメイン名をいれて、Createボタンを押せば登録完了。GoogleAppsに登録してあるドメインは下にいれるみたいですね。登録してないので、今回は試してません。

snap244

 

3.登録が終わるとドメインリストに載ります。ここで登録したドメインをクリックすると次はレコード一覧にいきます。

snap245

 

4.Add a recordでレコード編集画面になります。

snap246

こんな感じ。

snap247

試しにwww.sa-to-shi.netを登録してみます。Aレコードは、そのIPアドレスの実体として返す、でしたかね。

MXはメールサーバーのアドレス、CNAMEは他のサブドメインの別名を付けるときに使います。

AAAAとTXTはわかってないので、ちょっと調べましょう。

snap248

 

5.無事登録されました。

snap249

 

DNSの更新が終わり、世界中に行き渡るまでには若干時間がかかるかもしれません。気長に待ちましょう。

最近は昔ほど時間がかからない印象があるので、プロバイダによってはすぐに更新されるかも知れません。

 

 

…今回使ったドメインは、5分と経たないうちに使えるようになってました。早い!

snap250

 

現在は無料プランなので、15レコードまで使えます。

詳細は料金・プランのページに書かれていますが、12レコード追加の計27レコード使っても毎月100円で利用できるので、大抵のサイトの運用には困らないでしょう。

TTLを変更したいとか、もっとたくさんのレコードがないとドメインが管理しきれないという人でも月額1000円のBASICで充分だと思います。それ以上のPROやPREMIERも用意されているのは安心ですね。

 

それから、REST API リファレンスが公開されています。APIを使ってレコード更新もできるのでDynamicDNSみたいなことも手軽にできそうです。あとでちょっと試してみたいと思っています。

 

そんなわけで、DNS立てたいけど管理が面倒とか、設定ファイル書くのが面倒という人(もちろん、自分のことです)にはかなりありがたいサービスです。無料で試して必要に応じて有料プランへ乗り換えられるのもありがたい。

しばらく試してみたいと思います。

Windows8 – その2

まず、VirtualBoxの設定。

1.一般-基本

オペレーティングシステム:MicrosoftWindows

バージョン:Windows7(64bit)

snap236

2.システム-マザーボード

メインメモリ:4GB

それ以外はデフォルト

snap237

3.システム-プロセッサ

3CPU

それ以外はデフォルト

snap238

4.ディスプレイ-ビデオ

ビデオメモリ128MB

snap239

ちょっとビデオメモリが少ないかもしれません。

続きを読む…

%d人のブロガーが「いいね」をつけました。