外国人旅行者向けラーメン店検索アプリを作る話@code for kosen勉強会#1
DESCRIPTION
2014/4/6に明石高専/松江オープンソースラボで開催された「Code for KOSEN勉強会#1」にて発表しました「外国人旅行者向けラーメン店検索アプリを作る話」の発表スライドです. ※諸事情に付き一部ページを削っております. 本スライドで利用しているスライドにある佐藤秀峰作「ブラックジャックによろしく」の改変画像については,すべて漫画 on Web(http://mangaonweb.com)より引用しております.TRANSCRIPT
\外国人旅行者向け/
明石高専 和田 佳大(@e10dokup)
ラーメン店検索アプリを作る
ときに便利なライブラリとかの話
勉強会 #1
自 己 紹 介
自己紹介
明石高専 電気情報工学科5年Code for KOSEN Branch:Akashi プログラマactif for Android を作ってました
@e10dokup
自己紹介
Facebook ではこんなカバー画像してます
アジェンダ
・ライブラリの紹介・API の紹介自 己 紹 介
\やっと本題です/
成 り 行 き ライブラリ紹介
ライブラリ紹介
キモい
+ キモい
[ 要出典 ]
超キモい!
By 「ブラックジャックによろしく」,佐藤秀峰,漫画 on web
超キモい!
ライブラリ紹介
TextView hogeView = (TextView) findViewById(R.id.text_hoge);
例)XMLで指定したViewを Java ソース上で扱う時
キャストしないとダメ
ライブラリ紹介
goodCountView = (TextView)view.findViewById(R.id.bazar_detail_good_count); commentsCountView = (TextView)view.findViewById(R.id.bazar_detail_comment_count); bodyView = (TextView)view.findViewById(R.id.bazar_detail_body); menuItemListView = (ListView)view.findViewById(R.id.bazar_detail_menu_list); commentButtonView = (ImageButton)view.findViewById(R.id.bazar_detail_comment); goodButtonView = (ImageButton)view.findViewById(R.id.bazar_detail_good); bazarImageView = (ImageView) view.findViewById(R.id.bazar_detail_image); bazarMapView = (ImageView) view.findViewById(R.id.bazar_map);
※つかうViewの数だけ行います
actif for Android より参照
こんな感じで面倒なことに…
ライブラリ紹介
そ・こ・で
ライブラリ紹介
ライブラリを使って楽をしましょう!
for Android Studio
Eclipse については検索しましょう(下は一例)Eclipse android ライブラリ
ライブラリ紹介 導 入 方 法
導 入 方 法
ライブラリの .jar ファイルを libs ディレクトリに入れる
<注意>.jar ファイルを入れた後,build.gradle の dependencies の項目に compile fileTree(dir: 'libs', include: '*.jar')
と記入して,プロジェクトを sync しましょう
導 入 方 法
Gradle を使って導入する
build.gradle の dependencies の項目に compile '<group>:<name>:<version>'
と記入して,プロジェクトを sync しましょう
導 入 方 法
.jar と合わせると…,
dependencies{
compile filetree(dir: 'libs', include: '*.jar')
compile '<group>:<name>:<version>'
}
導 入 方 法
Maven を使って導入する
pom.xml に <dependency>
<groupId>group_id</groupId>
<artifactId>library_name</artifactId>
<version>library_version</version>
<type>jar</type> <!-- or apklib -->
</dependency>
と記入して,プロジェクトを sync しましょう
Butter KnifeURL:http://jakewharton.github.io/butterknife/
Butter Knife
Q. どんなライブラリ?
・Activity, View, Fragment の findViewById
・Viewの OnClickLisnener
を楽に書くためのライブラリ
Butter Knife
まず,Viewをアノテーション付きで宣言
@InjectView(R.id.view_hoge)
TextView hogeView;
@InjectView(R.id.view_fuga)
TextView fugaView;
Butter Knife
いつもは findViewByIdが並ぶところで…
ButterKnife.inject(Activity) //Activity
ButterKnife.inject(Fragment, View) //Fragment
ButterKnife.inject(Adapter, View) //ViewHolder
これでOK!(ButterKnife.inject内で findViewByIdをやってくれます)
Butter Knife
Viewのクリックリスナ
hogeView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ボタンが押された時の処理
}
});
Butter Knife
Butter Knife だと…
@OnClick(R.id.hoge_View)
void onClickButton() {
// ボタンが押されたときの処理
}
Butter Knife
他に使えるリスナ
・OnLongCLick
・OnCheckChanged(CompoundButton)・OnEditorAction(EditText)・OnFocusChanged(EditText)・etc
Google GuavaURL:https://code.google.com/p/guava-libraries/
Guava
Q. どんなライブラリ?
Google 謹製の Java の便利ライブラリ.
普段やっていることを短く書くことが目的.(旧名:Google Collection)
別にAndroid のためのライブラリってわけではない
Guava
//Guava 非使用時
List<HogeFugaPiyoObject> list
= new ArrayList<HogeFugaPiyoObject>();
//Guava 使用時
List<HogeFugaPiyoObject> list
= Lists.newArrayList();
List の宣言
冗長じゃなくなった!
Guava
とても強いRange 回りRange.closed(”a”,”b”)
//a,b までの間に存在する文字群
Range.lessThan(4) //4 以下の範囲
Range.greaterThan(5) //5 以上の範囲 etc...
contains,containsAllメソッドでRange 内に存在しているか判定
Guava
データを区切り文字で連結する Joiner
String[] meets = new String[]
{”beef”,”pig”,”chicken”};
Joiner.on(”,”).skipNulls()
“beef,pig,chicken”というString に
Guava
データを区切り文字で分割するSplitter,CharMatcherString tel = “0123 456 789”;
CharMatcher matcher
= CharMatcher.WHITESPACE;
Iterable<String> splits
= Splitter.on(matcher).split(tel);
0123,456,789というString のリストに
Guava
他には…・比較(ComparisonChain でメソッドチェイン)・set の中の単語検索(HashMultiset)・プリミティブ型に対するユーティリティメソッド・etc
VolleyURL:https://android.googlesource.com/platform/frameworks/volley/
Volley
Q. どんなライブラリ?
Google 謹製のネットワークプログラミング用ライブラリ.非同期通信でのHTTPリクエストとかが簡単に実装できる
※Volley を導入する際,Git からプロジェクトをクローンしてサブモジュールとしてプロジェクトにインポートします.詳しくは「android volley 導入」と言ったワードで検索しましょう
Volley
リクエストまでRequestQueue queue = Volley.newRequestQueue(Context);
queue.add(new JsonObjectRequest(Method.GET, url, null
listener, errorListener))
queue.start() // リクエストの開始
レスポンスを受け取るリスナ
処理の失敗を受け取るリスナ
Volley
レスポンスを受け取るリスナ
Listener<JSONObject> listener = new Listener<JSONObject>(){
@Override
public void onResponse(JSONObject response){
//JSONObject のパースとか
}
};
Volley
処理の失敗を受け取るリスナ
ErrorListener errorListener = new ErrorListener(){
@Override
public void onErrorResponse(VolleyError error){
// エラー処理やエラー表示
}
};
Volley
画像も簡単にリクエスト出来ます
ImageLoader imageLoader = new ImageLoader(queue,
new BitmapCache()); // キャッシュを実装しましょう
ImageLoader.ImageListener listener
= ImageLoader.getImageListener
(ImageView, android.R.drawable.ic_menu_rotate,
android.R.drawable.ic_delete);
imageLoader.get(url, listener);
Volley
Volley を使う利点・比較的簡単に実装できる・拡張が簡単(XMLの処理とかも実装出来ます)・簡単にリクエストのキャンセルができる
他にこんなライブラリも…
Others
・Android Bootstrap(http://www.androidbootstrap.com/) Android で Twitter Bootstrap みたいに開発
・Android-Validator(https://github.com/throrin19/Android-Validator)
EditText のバリデーションを簡単にする
Others
・IconicTextView(https://github.com/atermenji/IconicDroid) Font Awesome等のアイコンフォントが 使える TextView
・Twitter4j(http://twitter4j.org/ja/) Twitter との連携をすることができる
API紹介
API 紹介
飲食店の情報を取得出来ます・店名・座標・営業時間・席の数 などなど
URL:http://webservice.recruit.co.jp/hotpepper/reference.html
ホットペッパーAPI
鉄道駅の情報を取得出来ます・駅名・沿線名・座標・都道府県 などなど
URL:http://www.ekidata.jp/api/api_station.php
API 紹介
駅データ API
地図上二点間のルートを算出します・Google Maps API との併用でのみ使用可・クエリ制限2500回 /day・json か XMLでの出力が可能
URL:http://www.ekidata.jp/api/api_station.php
API 紹介
Google Directions API
Ramen Shop
F i n d e r の場合(例えばの使い方)
現在地か駅データAPI から座標を取得↓
ホットペッパーAPI でラーメン店の情報を取得↓
Directions API とMaps API でルート表示
API 紹介
というわけで
ライブラリとAPIを駆使して…
By 「ブラックジャックによろしく」,佐藤秀峰,漫画 on web
少しでも快適な
アプリ開発を
行ってくれよ!
以上ですありがとうございました