Androidアプリ開発したい!

IT屋がGalaxySを手に入れてからAndroidに興味が湧き、いろいろと開発したりしてます。 GalaxyNexusがメイン機となり、ようやく普及し始めたAndroid4.0への関心が高いです。 仕事では、iPhone向けとかのソシャゲ作ってます。

2012年05月

Fragment 基礎講座 / ハンズオンを一人でやってみた@その2(完)

ATND SearchAPIを使ったFragment基礎講座の第二回目です。
前回の続きで7章から開始します。

ソースをかなり弄ったので、色々動かなくなった・・・
そして、そもそも動いていたのが謎なif文だったことに気づきがっつり修正。

とりあえずリストをタップすると詳細画面を表示するようにした。

313aaa58.png

う~ん
HTMLタグが満載ですな。
WebViewで表示するべきか。。。?

調べてみたら以下の方法でHTMLタグ認識する方法があるみたいなので、
TextViewのままでも多少マシになった。
しかし、独自CSSとかが認識できてないみたいでうまく表示されてないところもある。
やっぱりWebViewなのか・・・
mDescriptionView.setText(Html.fromHtml(atndData.getData(AtndData.DESCRIPTION)));
あと、7章~8章のlayout-land対応で横向きの場合に1アクティビティで表示するようにした。

e477c793.png

と思って続きを読むと、どうやらこれはアンチパターンのようで、

「横画面で一覧をタップ」⇒「横に詳細がでる」⇒「縦画面にする」⇒「縦画面で一覧をタップ」

で落ちました。

b4bc166b.png

一度、横画面にするとATNDDetailFragmentが生成されてしまうため、
ATNDDetailFragmentが、nullかどうかで縦画面・横画面を判定するのはダメらしい。
 

main.xmlの方でFragmentを入れるのではなく
FrameLayoutを入れておき
一覧タップ時にFrameLayoutにATNDDetailFragmentを入れるようにする。
 

ってなわけで、完成したっ!!
そしてハンズオンの課題も一応完了。
 
ところどころオリジナル実装してたから結構時間かかってしまった。
それでも合計で8~10時間くらいかな。

203e30af.png

あとは見た目整えて、
Android4.0ならではのUIを実装して、
検索方法とか充実させれば。。。リリースしても問題なさそう。

簡単に言うけど先が長い・・・


【感想】
とりえあえずFragmentのなんたるかは、半分くらい理解できたような気がする。
Fragmentでの実装を手軽く学ぶには、丸一日くらいかけてこれをやるのをオススメ。
※ただし、若干誤植や仕様変更部分もあるので、
それを解決しながら進むくらいの経験がないと厳しいかもしれないが・・・

あとは今後アプリ作るときはひたすらActivity実装を止めていって、
Fragmentベースでコーディングして慣れるしかない。

Fragment 基礎講座 / ハンズオンを一人でやってみた@その1

第3回名古屋android勉強会で実施したやつです。
こないだUIの勉強会に行ったときに、
あんざいゆきさんが紹介してたのでやってみました。 


ちなみに私は、Support packageは使わずに
Android 4.0で実装してます。(だってその方が見た目とかカッコいいし!)

結果としては、15:00~18:00の約3時間
6章まで動作含めて確認しました。

XmlParserのところが、
当時とATNDのAPI仕様が変わってて苦戦した・・・

evennteventsになってたりとか地味に気がつかない...OTL

昔にJavaの案件でXmlを解析するときに使った、
commonsのDigesterとか使えば楽なのだろか?
でも性能的に遅くなるなら
やっぱりゴリゴリやったほうがいいのか?

気が向いたらXMLParserもいい感じの無いか探してみよう。

8a548f5e.png

あまり綺麗なソースコードではないが、XmlParserの部分。

yumでMySQLをinstallした後に改めてrpmでMySQLをinstallする時のメモ

今回は、以前yumでインストールしたMysql 5.1をアンインストールして、
rpmでMySQL5.5.24をインストールします。


まず大事なデータベースはバックアップ!

[root@localhost /]# mysqldump -u root -p****** > springdump.sql

※******はパスワード

yumでインストールしたMySQLをアンインストール

[root@localhost home]# yum remove mysql


同じくライブラリもアンインストール

[root@localhost home]# yum remove mysql-libs

※これを消さないとrpmインストール時に
「ファイル /usr/share/mysql/charsets/cp1256.xml (パッケージ MySQL-server-5.5.24-1.linux2.6.i386 から) は、パッケージ mysql-libs-5.1.61-1.el6_2.1.i686 か らのファイルと競合しています。」
みたいなエラーが一杯でて失敗します。

モジュールをダウンロード

[root@localhost home]#  wget ftp://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.5/MySQL-5.5.24-1.linux2.6.i386.tar
 

MySQL-serverをインストール

[root@localhost home]# rpm -ihv MySQL-server-5.5.24-1.linux2.6.i386.rpm
準備中...                ########################################### [100%]
ls: cannot access /var/lib/mysql/*.err: そのようなファイルやディレクトリはありません
ls: cannot access /var/lib/mysql/*.err: そのようなファイルやディレクトリはありません
   1:MySQL-server           ########################################### [100%]

MySQL-clientをインストール

[root@localhost home]# rpm -ihv MySQL-client-5.5.24-1.linux2.6.i386.rpm
準備中...                ########################################### [100%]
   1:MySQL-client           ########################################### [100%]


インストールの確認

[root@localhost home]# rpm -q MySQL-client
MySQL-client-5.5.24-1.linux2.6.i386

[root@localhost home]# rpm -q MySQL-server
MySQL-server-5.5.24-1.linux2.6.i386

※ちなみに本来はmy.confとか色々用意しなければいけないが、
yumでのインストール時に作成されているのでそれをそのまま使う!!!

MySQLを起動

[root@localhost init.d]# /etc/init.d/mysql start
Starting MySQL... SUCCESS!


起動を確認

[root@localhost init.d]# ps -ef | grep mysql
root      2881     1  0 09:32 pts/1    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/localhost.localdomain.pid
mysql     2959  2881  4 09:32 pts/1    00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/lib/mysql/localhost.localdomain.err --pid-file=/var/lib/mysql/localhost.localdomain.pid
root      2983  2408  0 09:32 pts/1    00:00:00 grep mysql


MySQLに接続

[root@localhost init.d]# mysql -u root -p******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.24 MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


※******はパスワード

データベースの確認

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| spring             |
+--------------------+
3 rows in set (0.00 sec)


springテーブルに切り替える

mysql> use spring;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed


以前作成したテーブルの中身を確認

mysql> show tables;
+------------------+
| Tables_in_spring |
+------------------+
| CARD             |
+------------------+
1 row in set (0.00 sec)

mysql> select * From CARD;
+--------------------------------------+---------------+
| ID                                   | NAME          |
+--------------------------------------+---------------+
| 0001                                 | test          |
| e927e9ac-9b0d-40fb-979b-9f33175f0e61 | No Name       |
| f7c5fc57-d93d-4eb6-9059-adc0a89bdb5e | No Name       |
| 0e1ef8c2-aa36-4567-89d4-aab7537b4317 | No Name       |
| 814df8ec-4fc5-43ae-bbaa-2269b6f7f645 | Sample Update |
| 3b5da608-c815-4ea2-b777-fc235c95b51c | No Name       |
| 940a15ef-41ab-4280-a683-ffb780833154 | No Name       |
| 82cd6cc9-67d1-4495-a5d1-a1a0204cb42b | No Name       |
| c7882ae2-68e3-4df7-8917-b2233589dc32 | No Name       |
| 5bea357b-4e55-4187-b745-0c490d487db6 | No Name       |
| 9b8370e5-03f0-4ea0-b41b-0cc5f6d05b16 | No Name       |
| 316ff874-0866-4ed8-8bba-fffd1215fc3f | No Name       |
| 103cf3d2-4988-4fd6-9c28-6340d8f2e0ee | No Name       |
+--------------------------------------+---------------+
13 rows in set (0.00 sec)

ちゃんとデータも残ってる!
ってか、そもそもアップグレードすればよかったのでは?と思ってしまったが、
まあrpmでのインストールもやってみたかったので、
これはこれでよしとしよう。


616a77db.png

java Spring3.xを使ってみる

せっかくScientificLinuxをVMにインストールしたので、
Webアプリケーションを作って乗っけてみたいなぁ~と思い
Springを復習しようとしたらあまりの激変に想像以上に時間がかかってしまったOTL

どうもSpring3関係の書籍というかSpringの日本語書籍が全般的に少なくて、
英語苦手な私としてはかなりハードルが高いです・・・

【1.STS(SpringSource Tool Suite)のインストール】
SpringSource公式(SpringSource Tool Suiteのダウンロード)URL:

※現時点2012/05/20の最新バージョンは、「2.9.1.RELEASE」です。

インストールというかセットアップは特別難しいことはありません。
ダウンロードするためにユーザ情報の入力が求められますが、
別にメールでURLが来るわけでもないので、
ぶっちゃけて適当な入力でもダウンロード可能です。

bad22c04.png

私は、InstallerではなくZipにしました。
他のPCでも使うときとかコピーが楽ですし?

こちらのサイトを少し参考にしました。
ありがとうございました。


【2.STS(SpringSource Tool Suite)を日本語化】
Pleiades (プレアデス)をダウンロードして、
「plugins」フォルダをそのままSTSインストール直下に入れちゃえばOKです。
 
例)※私はC:\直下にZip解答したので以下のパスです
C:\springsource\sts-2.9.1.RELEASE


【3.Spring3 DIでHelloWorld】
これはまんま以下のサイトの通りにやったので、
こっち見ていただけると分かりやすいかと思います。



【4.component-scanがエラーになるように、わざと間違えてみた】

プロジェクト構成
※Serviceインターフェースの具象クラスで、「@Component」アノテーションがついたクラスが
com.kyokomi.hellospring」パッケージ下に2つ存在する状況。

b42fa725.png




app-context.xml
beanのcomponent-scanの対象が"com.kyokomi.hellospring"以下のパッケージになっている。


■実行結果

ポイントは「No unique bean of type [com.kyokomi.hellospring.Service] is defined」の一言。

英語が苦手な私にもわかるレベルの内容ですが、
一応google翻訳した結果がこれです。

「型のないユニークな豆なし[com.kyokomi.hellospring.Service]定義されています」

ちょっとおしい!(笑)


勝手に解釈するとこんな感じでしょうかね。

[com.kyokomi.hellospring.Service]Beanの定義は一意ではありません。

要するに「そのServiceってBeanが2つあるけど、どっち使えばええねん!!?」
ってことですね。


対策
対策としては、以下の3つがパッと思いつきました。
まあ他にもあるだろうけどまだまだ初心者なので、この程度が限界っす。


1.そもそもどっちかのクラスを消す

2.StubServiceを使うのなら、app-contextのcomponent-scan範囲を"com.kyokomi.hellpspring.stub"にする
 ⇒この場合はMainクラスがscanから外れるので、以下を追加する必要がありますが
  <bean id= "main" class ="com.kyokomi.hellospring.Main" />

3."com.kyokomi.hellostub"とかにして、Serviceインターフェースの具象クラスを別のパッケージ階層にする


とりあえず「2.」をやってみた結果

63969548.png


【感想】
Springは1.x時代に触った以来だからあまりの進化っぷりに驚きを隠せない。
なんかもっとxmlの設定ファイルとかごちゃごちゃしてて辛かった記憶しかないな・・・
やっぱ時代はアノテーションとかでの自動接続とかが賢いやりかたなのね!

また、気が向いたらSpring3 MVCとかもやります。




Java7(JDK1.7)のラインナップを試しに使ってみる

主な変更点を抜粋して、実際に動かしてみた。
もっと詳しい内容を知りたい場合は、
以下のURLとかで確認してください。わかりやすいです。

①switch文で文字列
nullだとぬるぽで落ちます

今まで何度かほしいなと思った文字列swichがついに対応か。
まあif文でもいいけどやっぱ明らかに1つしかチェックしないときはswich文の方が、
パッと見でわかるからいいよね。

②tra catchで全例外をExceptionで受けたとき、
throws Exceptionをつけずに再スローできるようになった

③数値リテラルに_(アンダーバー)が使えるように
数値が並びすぎるとゲシュタルト崩壊するからね・・・・

④総称型にダイヤモンド演算子<>を指定できるように
構文上明白なときに型引数を省略できるもの
書く手間が省けるからいいのか

⑤整数リテラル0bで始めると2進数
int nisin_num = 0b1111001001001;
ふ~ん、どっかの案件の時にあればよかったのにと思ってしまう

⑥リソース付きtryキャッチで自動的にclose()してくれる
try-with-resources statement
※必ずしもtry文でnewしなくてもよい

これは便利だ。
IO系のクローズをcatchとかfinallyで書かなくてよくなる

⑦例外のマルチキャッチ
あまり関係ないけど、
マルチキャッチってなんか語呂がイイネ!

※他にも色々あるけどとりあえずこの7つで満足。

■ソースコード


■実行結果はこんな感じ

b419e0dc.png


■ちなみに①でヌルポを実験した結果

cfc9a07e.png

以上です!
中々充実してるからガンガン使って慣れていきたいと思います。
AndroidもそろそろJava7になるとかなんとかって話もあるみたいですし?

持ってる端末
・Galaxy S root化済    (2.3.6)
・Galaxy Nexus          (4.1.1)
・GALAPAGOS A01SH (4.0.4)
・ONDA Vi10              (4.0.3) 
・iPod Touch           (iOS 6.0)
記事検索
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

  • ライブドアブログ