Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Androidの通信周りのコーディングについて
私です名前 : 高木翔一会社 : 株式会社ディディアイディTwitter : @fly1ncublog : http://blog.fly1ncu.comスライドはアップロードするのであとでゆっくりみてね
Activityに2000行も3000行も書かないでほしい(切実)
通信周りがすっきりしない4つの理由•  JSONやXMLのパースめんどい•  マルチスレッドプログラミングめんどい•  クラス分割うまくいかない•  エラー処理めんどい
JSONやXMLのパース
JSONやXMLのパース{“id” : 0,“name” : “tsubu”,“place_name” : “a-team”}	public class Meeting {private int id;private String name;p...
パーサーを書くpublic class MeetingParser {private interface Key {String ID = “id”,String NAME = “name”,String PLACE_NAME = “place...
パーサーを書かないオープンソースライブラリをつかうとパーサー書かなくてもいい• JsonPullParser• GSON
JsonPullParserを使う@JsonModelpublic class Meeting {@JsonKey private int id;@JsonKey private String name;@JsonKey private Str...
XMLはSimpleがいいよ!@Rootpublic class Meeting {@Element private int id;@Element private String name;@Element private String pla...
マルチスレッドプログラミングの必要性
マルチスレッドプログラミングの必要性•  AndroidはUIスレッドで通信できない–  昔はできたのよ。やらないけど•  別スレッドで通信しなきゃ•  UIスレッド以外ではUIを変更できない•  UIスレッドで終了時のUI変更しなきゃ
通信部分のバックグラウンド処理private Handler mHandler = new Handler();private void downloadString(final String url) {mHandler.post(new R...
UIスレッドの処理private void onDownloaded(final Meeting meeting) {// Activity#runOnUiThreadrunOnUiThread(new Runnable {@Overridep...
AndroidAnnotationsを使う@Backgroundvoid downloadString(final String url) {HttpClient client = new DefaultHttpClient ();HttpGe...
AsyncTaskを使うprivate class DownloadTask extends AsyncTask<String, Integer, Meeting> {ProgressDialog progressDialog;@Overrid...
AndroidAsynchrousHttpを使う// UIスレッドでコールするAsyncHttpClient client = new AsyncHttpClient();client.get(“http://hoge.jp”, new Asy...
クラス分割したときのクラス間の処理
クラス分割したときのクラス間の処理通信部分を別クラスにすると通信終了時に元のクラスになんか合図したいよね
強結合での実装public class DownloadTask{public void execute(MainActivity mainActivity) {// (略) 通信の処理とかmainActivity.onDownloaded()...
コールバックでの実装public class DownloadTask{public interface CallBack {void onDownloaded();}public void execute(CallBack callBack)...
コールバックでの実装public class MainActivity extends Activityimpletents DownloadTask.Callback {private void startDownload() {new Do...
AsyncTaskLoaderでの実装public class SampleActivity extends Activity implementsLoaderCallbacks<Meeting> {// 省略	@Overridepublic ...
AsyncTaskLoaderでの実装public class MeetingLoader extendsAsyncTaskLoader<Meeting> {//省略@Overridepublic List<Meeting> loadInBac...
エラー処理はガンバル&めんどくさがらないtry {downloadTask();} catch (Exception e) {}	やめてください
エラー処理public class DownloadTask{public interface CallBack {void onDownloaded();void onDownloadFailured();}public void execu...
ご清聴ありがとうございました
Nächste SlideShare
Wird geladen in …5
×

Androidの通信周りのコーディングについて

18.384 Aufrufe

Veröffentlicht am

  • Dating direct: ❶❶❶ http://bit.ly/39sFWPG ❶❶❶
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Follow the link, new dating source: ♥♥♥ http://bit.ly/39sFWPG ♥♥♥
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • DOWNLOAD THAT BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... Download Full doc Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... Download PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book that can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer that is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story That Helped Ignite a Movement,-- Atomic Habits: An Easy &amp; Proven Way to Build Good Habits &amp; Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths that Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

Androidの通信周りのコーディングについて

  1. 1. Androidの通信周りのコーディングについて
  2. 2. 私です名前 : 高木翔一会社 : 株式会社ディディアイディTwitter : @fly1ncublog : http://blog.fly1ncu.comスライドはアップロードするのであとでゆっくりみてね
  3. 3. Activityに2000行も3000行も書かないでほしい(切実)
  4. 4. 通信周りがすっきりしない4つの理由•  JSONやXMLのパースめんどい•  マルチスレッドプログラミングめんどい•  クラス分割うまくいかない•  エラー処理めんどい
  5. 5. JSONやXMLのパース
  6. 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;}// (省略)} JSONPOJOパース(デシリアイズ)シリアライズ
  7. 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. 8. パーサーを書かないオープンソースライブラリをつかうとパーサー書かなくてもいい• JsonPullParser• GSON
  9. 9. JsonPullParserを使う@JsonModelpublic 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;}// (省略)} POJOprivate void parse(String json) {Meeting meeting = MeetingGen.get(json);} POJOにマーカーアノテーションをつけるだけ!
  10. 10. XMLはSimpleがいいよ!@Rootpublic 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. 11. マルチスレッドプログラミングの必要性
  12. 12. マルチスレッドプログラミングの必要性•  AndroidはUIスレッドで通信できない–  昔はできたのよ。やらないけど•  別スレッドで通信しなきゃ•  UIスレッド以外ではUIを変更できない•  UIスレッドで終了時のUI変更しなきゃ
  13. 13. 通信部分のバックグラウンド処理private Handler mHandler = new Handler();private void downloadString(final String url) {mHandler.post(new Runnable {@Overridepublic 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. 14. UIスレッドの処理private void onDownloaded(final Meeting meeting) {// Activity#runOnUiThreadrunOnUiThread(new Runnable {@Overridepublic void run() {mProgresDialog.dismiss(); // プログレスダイアログを消すsetMeeting(meeting);}}} ネスト多くねー?(#^ω^)
  15. 15. AndroidAnnotationsを使う@Backgroundvoid downloadString(final String url) {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);} @UiThreadvoid onDownloaded(final Meeting meeting) {mProgresDialog.dismiss(); // プログレスダイアログを消すsetMeeting(meeting);}
  16. 16. AsyncTaskを使うprivate class DownloadTask extends AsyncTask<String, Integer, Meeting> {ProgressDialog progressDialog;@Overrideprotected void onPreExecute() {progressDialog = new ProgressDialog(SampleActivity.this);progressDialog.show();}@Overrideprotected 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);}@Overrideprotected void onPostExecute(Meeting meeting) {progressDialog.dismiss();setMeeting(meeting);}
  17. 17. AndroidAsynchrousHttpを使う// UIスレッドでコールするAsyncHttpClient client = new AsyncHttpClient();client.get(“http://hoge.jp”, new AsyncHttpResponseHandler {@Overridepublic void onSuccess(String response) {// このなかはUIスレッドprogressDialog.dismiss();}});
  18. 18. クラス分割したときのクラス間の処理
  19. 19. クラス分割したときのクラス間の処理通信部分を別クラスにすると通信終了時に元のクラスになんか合図したいよね
  20. 20. 強結合での実装public class DownloadTask{public void execute(MainActivity mainActivity) {// (略) 通信の処理とかmainActivity.onDownloaded();}} 元のクラスを引数にして、メソッドをコールする
  21. 21. コールバックでの実装public class DownloadTask{public interface CallBack {void onDownloaded();}public void execute(CallBack callBack) {// (略) 通信の処理とかif (null != callback) {callback.onDownloaded();}}}
  22. 22. コールバックでの実装public class MainActivity extends Activityimpletents DownloadTask.Callback {private void startDownload() {new DownloadTask().execute(this);}@Overridepublic void onDownloaded() {// (略) ダウンロード後の処理とか}} public class MainActivity extends Activity {private void startDownload() {new DownloadTask().execute(new DownloadTask.Callback {@Overridepublic void onDownloaded() {// (略) ダウンロード後の処理とか}});}}
  23. 23. AsyncTaskLoaderでの実装public class SampleActivity extends Activity implementsLoaderCallbacks<Meeting> {// 省略 @Overridepublic Loader<Meeting> onCreateLoader(int id, Bundle args) {// 開始処理を書くMeetingLoader loader = new MeetingLoader(this); loader.forceLoad();return loader;}@Overridepublic void onLoadFinished(Loader<Meeting> loader, Meeting meeting) {// Loaderが終了すると呼ばれる }@Overridepublic void onLoaderReset(Loader<Meeting> meeting) {// Loaderがリセットされた時によびだされる }}
  24. 24. AsyncTaskLoaderでの実装public class MeetingLoader extendsAsyncTaskLoader<Meeting> {//省略@Overridepublic List<Meeting> loadInBackground() {Meeting meeting;// ダウンロード処理などreturn meeting;}}
  25. 25. エラー処理はガンバル&めんどくさがらないtry {downloadTask();} catch (Exception e) {} やめてください
  26. 26. エラー処理public class DownloadTask{public interface 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. 27. ご清聴ありがとうございました

×