More Related Content
PDF
PDF
PDF
Android Lecture #03 @PRO&BSC Inc. PDF
PDF
PDF
PPTX
PPTX
LINQ 概要 + 結構便利な LINQ to XML What's hot
PDF
PPTX
T sql の parse と generator PDF
PPT
PPTX
[CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang PPTX
PDF
nakameguro_feature.cpp vol.8 PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~ PDF
PDF
PDF
DTrace for biginners part(2) PDF
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例- PDF
PPTX
PDF
PDF
PDF
PDF
PDF
Similar to Androidの通信周りのコーディングについて
PDF
Reactive Extensionsで非同期処理を簡単に PDF
C#次世代非同期処理概観 - Task vs Reactive Extensions PPTX
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE) PPT
PPTX
Androidで使えるJSON-Javaライブラリ PDF
PPTX
An other world awaits you PDF
PDF
KEY
PPTX
PDF
KEY
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題 PDF
PPTX
PDF
ICT ERA + ABC 2012 Tohoku PPTX
PDF
PerlとJavaScriptとAndroidとiOSとのんのんバアとオレ PPTX
Androidアプリケーション応用 WebAPI開発 PPT
Android Hacks - Hack18 ~ Hack20 Androidの通信周りのコーディングについて
- 1.
- 2.
私です
名前 : 高木翔一
会社: 株式会社ディディアイディ
Twitter : @fly1ncu
blog : http://blog.fly1ncu.com
スライドはアップロードするのであとでゆっくりみてね
- 3.
- 4.
- 5.
- 6.
JSONやXMLのパース
{
“id” : 0,
“name”: “tsubu”,
“place_name” : “a-team”
}
public class Meeting {
private int id;
private String name;
private String placeName;
public void setId(int id) {
this.id = id;
}
public void getId() {
return id;
}
// (省略)
}
JSON
POJO
パース(デシリアイズ)
シリアライズ
- 7.
パーサーを書く
public class MeetingParser{
private interface Key {
String ID = “id”,
String NAME = “name”,
String PLACE_NAME = “place_name”
}
public static Meeting parse(String json) {
Meeting meeting = new Meeting();
JsonObject jsonObject = new JsonObject(json);
meeting.setId(jsonObject.getInt(Key.ID));
meeging.setName(jsonObject.getString(Key.Name));
meeting.setPlaceName(jsonObject.getString(Key.PLACE_NAME));
return meeting;
}
Androidには標準でJsonObjectクラスが準備されている
要素が増えてくるとめんどくさい (´Д`)
- 8.
- 9.
JsonPullParserを使う
@JsonModel
public class Meeting{
@JsonKey private int id;
@JsonKey private String name;
@JsonKey private String placeName;
public void setId(int id) {
this.id = id;
}
public void getId() {
return id;
}
// (省略)
}
POJO
private void parse(String json) {
Meeting meeting = MeetingGen.get(json);
}
POJOにマーカーアノテーションをつけるだけ!
- 10.
XMLはSimpleがいいよ!
@Root
public class Meeting{
@Element private int id;
@Element private String name;
@Element private String placeName;
public void setId(int id) {
this.id = id;
}
public void getId() {
return id;
}
// (省略)
}
POJO
- 11.
- 12.
- 13.
通信部分のバックグラウンド処理
private Handler mHandler= new Handler();
private void downloadString(final String url) {
mHandler.post(new Runnable {
@Override
public void run() {
HttpClient client = new DefaultHttpClient ();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = client.execute(httpGet);
String response;
response = EntityUtils.toString(response.getEntity(), "UTF-8");
// 文字列をパースするとか
Meeting meeting = MeetingGen.get(response);
onDownloaded(meeting);
}
}
}
ネスト多くねー?(#^ω^)
- 14.
UIスレッドの処理
private void onDownloaded(finalMeeting meeting) {
// Activity#runOnUiThread
runOnUiThread(new Runnable {
@Override
public void run() {
mProgresDialog.dismiss(); // プログレスダイアログを消す
setMeeting(meeting);
}
}
}
ネスト多くねー?(#^ω^)
- 15.
AndroidAnnotationsを使う
@Background
void downloadString(final Stringurl) {
HttpClient client = new DefaultHttpClient ();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = client.execute(httpGet);
String response;
response = EntityUtils.toString(response.getEntity(), "UTF-8");
// 文字列をパースするとか
final Meeting meeting = MeetingGen.get(response);
onDownloaded(meeting);
}
@UiThread
void onDownloaded(final Meeting meeting) {
mProgresDialog.dismiss(); // プログレスダイアログを消す
setMeeting(meeting);
}
- 16.
AsyncTaskを使う
private class DownloadTaskextends AsyncTask<String, Integer, Meeting> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(SampleActivity.this);
progressDialog.show();
}
@Override
protected String doInBackground(String... params) {
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = client.execute(httpGet);
String response;
response = EntityUtils.toString(response.getEntity(), "UTF-8");
return MeetingGen.get(response);
}
@Override
protected void onPostExecute(Meeting meeting) {
progressDialog.dismiss();
setMeeting(meeting);
}
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
コールバックでの実装
public class MainActivityextends Activity
impletents DownloadTask.Callback {
private void startDownload() {
new DownloadTask().execute(this);
}
@Override
public void onDownloaded() {
// (略) ダウンロード後の処理とか
}
}
public class MainActivity extends Activity {
private void startDownload() {
new DownloadTask().execute(new DownloadTask.Callback {
@Override
public void onDownloaded() {
// (略) ダウンロード後の処理とか
}
});
}
}
- 23.
AsyncTaskLoaderでの実装
public class SampleActivityextends Activity implements
LoaderCallbacks<Meeting> {
// 省略
@Override
public Loader<Meeting> onCreateLoader(int id, Bundle args) {
// 開始処理を書く
MeetingLoader loader = new MeetingLoader(this);
loader.forceLoad();
return loader;
}
@Override
public void onLoadFinished(Loader<Meeting> loader, Meeting meeting) {
// Loaderが終了すると呼ばれる
}
@Override
public void onLoaderReset(Loader<Meeting> meeting) {
// Loaderがリセットされた時によびだされる
}
}
- 24.
- 25.
- 26.
エラー処理
public class DownloadTask{
publicinterface CallBack {
void onDownloaded();
void onDownloadFailured();
}
public void execute(CallBack callBack) {
try {
// (略) 通信の処理とか
if (null != callback) {
callback.onDownloaded();
}
} catch (Exception e) {
if (null != callback) (
callback.onDownloadFailured();
}
}
}
}
- 27.