RxJava Droidkaigi

11f1c6f9a26793f33d93eed3a97f4a6c?s=47 kazy1991
February 20, 2016

RxJava Droidkaigi

Droidkaigi 2016で発表した資料です。

11f1c6f9a26793f33d93eed3a97f4a6c?s=128

kazy1991

February 20, 2016
Tweet

Transcript

  1. 僇傈ַ׵⢪ִ׷ 3Y+BWB걼⳿ػة٦ٝ

  2. し歊♰鰛 LB[VLJZPTIJEB 荈䊹稱➜ 䎃䏝ך倜⼼Ⰵ爡➙➬✲דכBOESPJE׾ꨄ׸גSBJMT剅ְגתׅկկ DPPLQBE*OD RJJUBLB[Z HJUIVCLB[Z UXJUUFS!LB[

  3. し歊♰鰛 DPPLQBE*OD RJJUBLB[Z HJUIVCLB[Z UXJUUFS!LB[ LB[VLJZPTIJEB 荈䊹稱➜ LB[Z ַׄ٦ דֶיְָ׃תׅ

  4. ְֲֲֿ➂ח耀ְגק׃ְ 3Y+BWBךⰅꟌ鎸✲׾铣׿דծ ➬✲ד׮⢪׏ג׫׋ְה䙼׏גְ׷倯 PS 醱꧟ז➬圫׾䭯א،فٔ׾Ꟛ涪׃גְגծ
 剑鵚㹋鄲ך鋅鸐׃ָ䝤ֻז׏גֹ׋ה䠬ׄ׷倯 ءٝفٕז،فٔ أؙٔ٦ٝ"1*ؙٔؒأز ך㜥さכծ3Y+BWB㼪Ⰵ׃ג׮׉ֿתדًٔحزזְַ׮׃׸תׇ׿կ

  5. ➙傈鑧ֿׅה ➙傈כ3Y+BWB׾⢪׏׋
 "1*הךꬊず劍Ⳣ椚חאְג鑧׃תׅ 3Y+BWBחכ➭ח׮ծ4VCKFDU׾⢪׏׋31涸ז⢪ְ倯װծKBWBך4USFBN"1*ך➿欽ה׃ג⢪ְ倯זו׮֮׶תׅկ

  6. ז׈"1*הךꬊず劍Ⳣ椚ח鑧׾穾׷ךַ 葿ղז俑腞ך鑧ָ幉ׄ׷ה׻ֽ׻ַ׵זֻז׷
 "1*הךꬊず劍Ⳣ椚ח㔭׏ג׷➂ָ♧殢㢳׉ֲ
 "1*הךꬊず劍Ⳣ椚ַ׵3Y+BWB׾㨣׭׷ךָؔأأً ז׈"1*הךꬊず劍Ⳣ椚ח鑧׾穾׷ךַ $PPLQBEך،فٔ׮3Y+BWB׾⢪׏גְ׷ךכծקה׿וָ"1*הךꬊず劍Ⳣ椚ך鿇ⴓדׅկ

  7. ז׈3Y+BWB׾אֲַךַ 3Y+BWBכוך״ֲז㉏겗׾鍑寸ׅ׷ךַ

  8. ꬊず劍؝٦ٕغحؙך铬겗 ꬊず劍؝٦ٕغحؙ儗➿ך铬겗 HFU"DUJWJUZ OVMM㉏겗 'SBHNFOUⰻדך؝٦ٕغحؙⳢ椚דضٕهׅ׷  ꬊず劍؝٦ٕغحؙך⚛⴨⻉湫⴨⻉זו醱꧟ז㹋鄲ׅ׷ה 〳铣䚍׮⡚ֻծ爡ⰻד׮كأزفؙٓذ؍أָ
 㹀ת׏גזַ׏׋ 鑫׃ֻכֿ׍׵חծIUUQUFDIMJGFDPPLQBEDPNFOUSZ

  9. ה֮׷ٖءؾ؟٦ؽأך嗚稊歗꬗ך⢽ 3Y+BWB׾ⵃ欽ׅ׷ה 知⽃חⳢ椚ָٓ؎ؿ؟؎ؙٕחCJOE⳿勻׷կ BOE 醱꧟ז➬圫ד׮ծ䓼⸂זؔلٖ٦ة٦׾⢪ֲֿהדծ
 㹑鎉涸ח鎸鶢ָ〳腉חז׶〳铣䚍׮䬐⥂ׁ׸׷կ ؔلٖ٦ة٦הכ0CTFSWBCMFַ׵鷏׵׸גֻ׷⦼׾㢌䳔ׅ׷ꟼ侧纇דׅկ

  10. ה֮׷ٖءؾ؟٦ؽأך嗚稊歗꬗ך⢽ ה֮׷ٖءؾ؟٦ؽأך嗚稊歗꬗׾⡲׷鑧׾⢽חծ
 3Y+BWBך걼⳿ػة٦ٝ׾ְֻאַ׀稱➜׃תׅկ
 DPPLQBEDPNהכⰋֻꟼ⤘זְ׮ךה罋ִג♴ְׁ

  11. #FGPSF3Y+BWB儗➿ כׄ׭חꬊず劍؝٦ٕغحؙ׾⢪׏גծ
 嗚稊歗꬗׾㹋鄲׃ג׫תׅկ

  12. #FGPSF3Y+BWB儗➿ public interface Callback { void onSuccess(List<Recipe> recipes); void onError(Throwable

    t); } public void searchRecipe(String keyword, Callback callback) {
 recipeApiClient.search(keyword, callback);
 } ⢽ ٖءؾ׾嗚稊ׅ׷ꬊず劍Ⳣ椚ך؝٦س
  13. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ 铣׫鴥׿דְתׅ
  14. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ 铣׫鴥׿דְתׅ
  15. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ 铣׫鴥׿דְתׅ
  16. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇
  17. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ !
  18. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ ! !
  19. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ ! ! !
  20. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ ! ! ! !
  21. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊ח㣟侁׃׋㜥さ 铣׫鴥׿דְתׅ
  22. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊ח㣟侁׃׋㜥さ 铣׫鴥׿דְתׅ
  23. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊ח㣟侁׃׋㜥さ 铣׫鴥׿דְתׅ
  24. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊ח㣟侁׃׋㜥さ
  25. #FGPSF3Y+BWB儗➿ searchRecipe(“εςʔΩ”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 addToList(recipes); } @Override public void onError(Throwable t) { showErrorView(t); } });
 } ⢽ չأذ٦ؗպךٖءؾ׾嗚稊ח㣟侁׃׋㜥さ ٔٗ٦سׅ׷ 铣׫鴥׫ח㣟侁׃ת׃׋ "
  26. 3Y+BWBך㼪Ⰵ ➙ךⳢ椚׾3Y+BWBד剅ֹ䳔ִג׫תׅկ

  27. 3Y+BWB㼪Ⰵך㛇燉 3Y+BWBךؙٓأ׾⢪ִ׷״ֲחׅ׷׋׭ח
 CVJMEHSBEMFח⣛㶷׾鷄⸇׃ת׃׳ֲկ # app/build.gradle
 dependencies {
 compile 'io.reactivex:rxjava:1.1.1' compile

    'io.reactivex:rxandroid:1.1.0'
 } 植㖈WFSָ剑倜דׅկSY"OESPJEחאְגכ䖓קו稱➜׃תׅկ
  28. 0CTFSWBCMFך⡲׶倯 TFBSDI3FDJQFًاحس׾0CTFSWBCMFח㢌䳔׃תׅ public void searchRecipe(String keyword, Callback callback) {
 recipeApiClient.search(keyword,

    callback);
 }
  29. 0CTFSWBCMFך⡲׶倯 TFBSDI3FDJQFًاحس׾0CTFSWBCMFח㢌䳔׃תׅ public void searchRecipe(String keyword, Callback callback) {
 recipeApiClient.search(keyword,

    callback);
 }
  30. 0CTFSWBCMFך⡲׶倯 TFBSDI3FDJQFًاحس׾0CTFSWBCMFח㢌䳔׃תׅ public void searchRecipe(String keyword, Callback callback) {
 recipeApiClient.search(keyword,

    callback);
 }
  31. 0CTFSWBCMFך⡲׶倯 
 public void searchRecipe(String keyword) {
 recipeApiClient.search(keyword, new Callback()

    { @Override public void onSuccess(List<Recipe> recipes) { } @Override public void onError(Throwable t) { } });
 } 痥✳䒷侧ךDBMMCBDL׾嶊׃גⰻ鿇ד搀せؙٓأ׾⡲׶תׅ
  32. 0CTFSWBCMFך⡲׶倯 
 public void searchRecipe(String keyword) {
 recipeApiClient.search(keyword, new Callback()

    { @Override public void onSuccess(List<Recipe> recipes) { } @Override public void onError(Throwable t) { } });
 } 痥✳䒷侧ךDBMMCBDL׾嶊׃גⰻ鿇ד搀せؙٓأ׾⡲׶תׅ
  33. 0CTFSWBCMFך⡲׶倯 
 public Observable<List<Recipe>> searchRecipe(String keyword) {
 recipeApiClient.search(keyword, new Callback()

    { @Override public void onSuccess(List<Recipe> recipes) {
 } @Override public void onError(Throwable t) {
 } });
 } 鵤׶⦼׾0CTFSWBCMF-JTU3FDJQFח㢌刿׃תׅ ֿך儗挿דכծ؝ٝػ؎ٕؒٓ٦חז׶תׅկ
  34. 0CTFSWBCMFך⡲׶倯 
 public Observable<List<Recipe>> searchRecipe(String keyword) {
 recipeApiClient.search(keyword, new Callback()

    { @Override public void onSuccess(List<Recipe> recipes) {
 } @Override public void onError(Throwable t) {
 } });
 } 鵤׶⦼׾0CTFSWBCMF-JTU3FDJQFח㢌刿׃תׅ ֿך儗挿דכծ؝ٝػ؎ٕؒٓ٦חז׶תׅկ
  35. 0CTFSWBCMFך⡲׶倯 ⰻ鿇ךⳢ椚׾0CTFSWBCMFד⺪׫ת׃׳ֲ public Observable<List<Recipe>> searchRecipe(String keyword) { return Observable.create(subscriber ->

    {
 
 
 
 
 
 
 
 
 
 
 
 }); } void 
 recipeApiClient.search(keyword, new Callback() {
 @Override
 public void onSuccess(List<Recipe> recipes) {
 
 
 } @Override public void onError(Throwable t) {
 }
 }); 0CTFSWBCMFכ؝ٝأزؙٓةָꦀ誊ׁ׸גְ׷ךדծ0CTFSWBCMFDSFBUF穗歋ד؎ٝأةٝأ׾⡲׶תׅկ
  36. 0CTFSWBCMFך⡲׶倯 0CTFSWBCMFך⚥חٗآحؙ׾剅ֹת׃׳ֲ public Observable<List<Recipe>> searchRecipe(String keyword) { return Observable.create(subscriber ->

    {
 recipeApiClient.search(keyword, new Callback() {
 @Override
 public void onSuccess(List<Recipe> recipes) {
 
 
 } @Override public void onError(Throwable t) { 
 } }); }); } void
  37. 0CTFSWBCMFך⡲׶倯 TVCTDSJCFSח؎كٝز׾鸐濼׃ג֮־״ֲ public Observable<List<Recipe>> searchRecipe(String keyword) { return Observable.create(subscriber ->

    {
 recipeApiClient.search(keyword, new Callback() {
 @Override
 public void onSuccess(List<Recipe> recipes) {
 subscriber.onNext(recipes);// イベントの通知 subscriber.onCompleted(); // 全イベントが終了した通知
 } @Override public void onError(Throwable t) { subscriber.onError(t); // 処理内で失敗した通知 } }); }); } void ֿ׸ד0CTFSWBCMF⻉כ㸣䧭דׅկ
  38. 0CTFSWBCMFך⡲׶倯 TVCTDSJCFSח؎كٝز׾鸐濼׃ג֮־״ֲ public Observable<List<Recipe>> searchRecipe(String keyword) { return Observable.create(subscriber ->

    {
 recipeApiClient.search(keyword, new Callback() {
 @Override
 public void onSuccess(List<Recipe> recipes) {
 subscriber.onNext(recipes);// イベントの通知 subscriber.onCompleted(); // 全イベントが終了した通知
 } @Override public void onError(Throwable t) { subscriber.onError(t); // 処理内で失敗した通知 } }); }); } void ֿ׸ד0CTFSWBCMF⻉כ㸣䧭דׅկ
  39. 0CTFSWBCMFך⡲׶倯 TVCTDSJCFSח؎كٝز׾鸐濼׃ג֮־״ֲ public Observable<List<Recipe>> searchRecipe(String keyword) { return Observable.create(subscriber ->

    {
 recipeApiClient.search(keyword, new Callback() {
 @Override
 public void onSuccess(List<Recipe> recipes) {
 subscriber.onNext(recipes);// イベントの通知 subscriber.onCompleted(); // 全イベントが終了した通知
 } @Override public void onError(Throwable t) { subscriber.onError(t); // 処理内で失敗した通知 } }); }); } void ֿ׸ד0CTFSWBCMF⻉כ㸣䧭דׅկ
  40. ず劍ًاحسך0CTFSWBCMF⻉ public List<Recipe> searchRecipe(String keyword) throws HttpException { // okhttpͱ͔HttpClientͰಉظ௨৴


    } 
 public Observable<List<Recipe>> searchRecipe(String keyword) { return Observable.create(subscriber -> { try{
 List<Recipe> recipes = ApiClient.search(keyword); subscriber.onNext(recipes); subscriber.onFinished(); } catch(HttpException e) {
 subscriber.onError(e);
 } } ⡭锑 ず劍ًاحس׾0CTFSWBCMF⻉ׅ׷㜥さ 搀꼽זأٖحس欰䧭׾鼘ֽ׷׋׭חծ0CTFSWBCMFך⚥魦כ⳿勻׷ꣲ׶ず劍Ⳣ椚ח׃ת׃׳ֲկ
  41. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”) .subscribe(new Subscriber<List<Recipe>>() {
 @Override
 public void onNext(List<Recipe> recipe)

    {
 addToList(recipes);
 }
 @Override
 public void onError(Throwable e) {
 showErrorMessage(t);
 }
 
 @Override
 public void onCompleted() { 
 }); ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ 3Y晛 铣׫鴥׿דְתׅ
  42. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”) .subscribe(new Subscriber<List<Recipe>>() {
 @Override
 public void onNext(List<Recipe> recipe)

    {
 addToList(recipes);
 }
 @Override
 public void onError(Throwable e) {
 showErrorMessage(t);
 }
 
 @Override
 public void onCompleted() { 
 }); ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ 3Y晛 铣׫鴥׿דְתׅ
  43. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”) .subscribe(new Subscriber<List<Recipe>>() {
 @Override
 public void onNext(List<Recipe> recipe)

    {
 addToList(recipes);
 }
 @Override
 public void onError(Throwable e) {
 showErrorMessage(t);
 }
 
 @Override
 public void onCompleted() { 
 }); ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ 3Y晛 铣׫鴥׿דְתׅ
  44. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”) .subscribe(new Subscriber<List<Recipe>>() {
 @Override
 public void onNext(List<Recipe> recipe)

    {
 addToList(recipes);
 }
 @Override
 public void onError(Throwable e) {
 showErrorMessage(t);
 }
 
 @Override
 public void onCompleted() { 
 }); ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ 3Y晛
  45. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”) .subscribe(new Subscriber<List<Recipe>>() {
 @Override
 public void onNext(List<Recipe> recipe)

    {
 addToList(recipes);
 }
 @Override
 public void onError(Throwable e) {
 showErrorMessage(t);
 }
 
 @Override
 public void onCompleted() { 
 }); ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ 3Y晛 !
  46. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”) .subscribe(new Subscriber<List<Recipe>>() {
 @Override
 public void onNext(List<Recipe> recipe)

    {
 addToList(recipes);
 }
 @Override
 public void onError(Throwable e) {
 showErrorMessage(t);
 }
 
 @Override
 public void onCompleted() { 
 }); ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ 3Y晛 ! !
  47. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”) .subscribe(new Subscriber<List<Recipe>>() {
 @Override
 public void onNext(List<Recipe> recipe)

    {
 addToList(recipes);
 }
 @Override
 public void onError(Throwable e) {
 showErrorMessage(t);
 }
 
 @Override
 public void onCompleted() { 
 }); ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ 3Y晛 ! ! !
  48. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”) .subscribe(new Subscriber<List<Recipe>>() {
 @Override
 public void onNext(List<Recipe> recipe)

    {
 addToList(recipes);
 }
 @Override
 public void onError(Throwable e) {
 showErrorMessage(t);
 }
 
 @Override
 public void onCompleted() { 
 }); ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊׃גٔأزח鷄⸇ 3Y晛 ! ! ! !
  49. -BNCEB׾ⵃ欽׃׋㜥さ searchRecipe(“εςʔΩ”) .subscribe(recipes -> { addToList(recipes); }, throwable -> {

    showErrorMessage(t); }, () -> {
 // লུՄೳ
 } ); 0CTFSWBCMFTVCTDSJCF חכٓيت䒭׾床ֿׅה׮⳿勻׷ 铣׫鴥׿דְתׅ +BWBָ⢪ִ׷橆㞮ד֮׸לծSYGVODUJPOT"DUJPOהSYGVODUJPOT"DUJPOָٓيتח㢌䳔דֹתׅկ
  50. -BNCEB׾ⵃ欽׃׋㜥さ searchRecipe(“εςʔΩ”) .subscribe(recipes -> { addToList(recipes); }, throwable -> {

    showErrorMessage(t); }, () -> {
 // লུՄೳ
 } ); 0CTFSWBCMFTVCTDSJCF חכٓيت䒭׾床ֿׅה׮⳿勻׷ 铣׫鴥׿דְתׅ +BWBָ⢪ִ׷橆㞮ד֮׸לծSYGVODUJPOT"DUJPOהSYGVODUJPOT"DUJPOָٓيتח㢌䳔דֹתׅկ
  51. -BNCEB׾ⵃ欽׃׋㜥さ searchRecipe(“εςʔΩ”) .subscribe(recipes -> { addToList(recipes); }, throwable -> {

    showErrorMessage(t); }, () -> {
 // লུՄೳ
 } ); 0CTFSWBCMFTVCTDSJCF חכٓيت䒭׾床ֿׅה׮⳿勻׷ +BWBָ⢪ִ׷橆㞮ד֮׸לծSYGVODUJPOT"DUJPOהSYGVODUJPOT"DUJPOָٓيتח㢌䳔דֹתׅկ
  52. -BNCEB׾ⵃ欽׃׋㜥さ searchRecipe(“εςʔΩ”) .subscribe(recipes -> { addToList(recipes); }, throwable -> {

    showErrorMessage(t); }, () -> {
 // লུՄೳ
 } ); 0CTFSWBCMFTVCTDSJCF חכٓيت䒭׾床ֿׅה׮⳿勻׷ ! ! ! ! +BWBָ⢪ִ׷橆㞮ד֮׸לծSYGVODUJPOT"DUJPOהSYGVODUJPOT"DUJPOָٓيتח㢌䳔דֹתׅկ
  53. -BNCEB׾ⵃ欽׃׋㜥さ 姻然חכծ0CTFSWBCMFך㹋鄲ח״׏גطحزٙ٦ؙⳢ椚ָ6*أٖحسד㹋遤ׁ׸גؙٓحءُ׃תׅկ 㹋כת׌ծ姻䌢ח⹛ֹתׇ׿!

  54. 0CTFSWBCMFך㹋遤أٖحس㉏겗 0CTFSWBCMFחず劍㹋遤ꬊず劍㹋遤ך嚊䙀כזְ 䭷㹀ךזְ㜥さך0CTFSWBCMFך㹋遤أٖحسךⴻ倖כꨇ׃ְךדծ4DIFEVMFSכ嫣㔐䭷㹀׃ת׃׳ֲկ

  55. 0CTFSWBCMFך㹋遤أٖحس㉏겗 0CTFSWBCMFחず劍㹋遤ꬊず劍㹋遤ך嚊䙀כזְ 䭷㹀ךזְ㜥さך0CTFSWBCMFך㹋遤أٖحسךⴻ倖כꨇ׃ְךדծ4DIFEVMFSכ嫣㔐䭷㹀׃ת׃׳ֲկ

  56. 0CTFSWBCMFך㹋遤أٖحس㉏겗 0CTFSWBCMFחず劍㹋遤ꬊず劍㹋遤ך嚊䙀כזְ 䭷㹀ָזְ㜥さכ 㛇劤涸ח ㄎל׸׋أٖحسד㹋遤ׁ׸׷ 䭷㹀ךזְ㜥さך0CTFSWBCMFך㹋遤أٖحسךⴻ倖כꨇ׃ְךדծ4DIFEVMFSכ嫣㔐䭷㹀׃ת׃׳ֲկ

  57. 0CTFSWBCMFך㹋遤أٖحس㉏겗 0CTFSWBCMFחず劍㹋遤ꬊず劍㹋遤ך嚊䙀כזְ 䭷㹀ָזְ㜥さכ 㛇劤涸ח ㄎל׸׋أٖحسד㹋遤ׁ׸׷ 䭷㹀ךזְ㜥さך0CTFSWBCMFך㹋遤أٖحسךⴻ倖כꨇ׃ְךדծ4DIFEVMFSכ嫣㔐䭷㹀׃ת׃׳ֲկ

  58. 0CTFSWBCMFך㹋遤أٖحس㉏겗 0CTFSWBCMFחず劍㹋遤ꬊず劍㹋遤ך嚊䙀כזְ 䭷㹀ָזְ㜥さכ 㛇劤涸ח ㄎל׸׋أٖحسד㹋遤ׁ׸׷ 4DIFEVMFS׾⢪׏ג僇爙涸ח㹋遤أٖحس׾䭷㹀׃ת׃׳ֲ 䭷㹀ךזְ㜥さך0CTFSWBCMFך㹋遤أٖحسךⴻ倖כꨇ׃ְךדծ4DIFEVMFSכ嫣㔐䭷㹀׃ת׃׳ֲկ

  59. HFU"DUJWJUZOVMM㉏겗 0CTFSWBCMFTVCTDSJCF0O 0CTFSWBCMFPCTFSWF0O 4DIFEVMFSח״׷㹋遤أٖحسךⵖ䖴

  60. 0CTFSWBCMFTVCTDSJCF0O 0CTFSWBCMFTVCTDSJCF0Oחאְג searchRecipeBy(“εςʔΩ”)
 .map(recipes -> { /* todo something */

    })
 .subscribeOn(Schedulers.io())
 .map(recipes -> { /* todo something */ }) .subscribe(recipes -> {});  0CTFSWBCMFⰋ⡤ך㹋遤أٖحس׾䭷㹀ׅ׷ؔلٖ٦ة٦  וֿד䭷㹀׃ג׮ꟼ⤘זְ  醱侧㔐䭷㹀ׁ׸׋㜥さכծ♧殢♳ד䭷㹀ׁ׸׋׮ךָ黝䘔ׁ׸׷
  61. 0CTFSWBCMFTVCTDSJCF0O 0CTFSWBCMFTVCTDSJCF0Oחאְג searchRecipeBy(“εςʔΩ”)
 .map(recipes -> { /* todo something */

    })
 .subscribeOn(Schedulers.io())
 .map(recipes -> { /* todo something */ }) .subscribe(recipes -> {});  0CTFSWBCMFⰋ⡤ך㹋遤أٖحس׾䭷㹀ׅ׷ؔلٖ٦ة٦  וֿד䭷㹀׃ג׮ꟼ⤘זְ  醱侧㔐䭷㹀ׁ׸׋㜥さכծ♧殢♳ד䭷㹀ׁ׸׋׮ךָ黝䘔ׁ׸׷ 4DIFEVMFSTJP כ♳ꣲךזְأٖحسف٦ַٕ׵أٖحس׾ⶴ׶䔲גגֻ׸תׅկ ⰋגךⳢ椚ָTDIFEVMFSTJP ָⶴ׶䮶׷
 ٙ٦ؕ٦أٖحسד㹋遤ׁ׸׷
  62. 0CTFSWBCMFPCTFSWF0O 0CTFSWBCMFPCTFSWF0Oחאְג searchRecipeBy(“εςʔΩ”)
 .map(recipes -> { /* todo something */

    })
 .subscribeOn(Schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())
 .map(recipes -> { /* todo something */ }) .observeOn(Schedulers.io()) .subscribe(recipes -> {});  0CTFSWBCMFַ׵ちֹ⳿ׁ׸׋⦼׾「ֽ《׷أٖحس׾ⴖ׶剏ִ׷  䭷㹀ׁ׸׋皘䨽״׶♴ךؔلٖ٦ة٦ךأٖحسָ㢌刿ׁ׸׷  ًاحسثؑ٦ٝך⚥ד醱侧㔐ㄎן⳿ֿׅה׮⳿勻׷
  63. 0CTFSWBCMFPCTFSWF0O 0CTFSWBCMFPCTFSWF0Oחאְג searchRecipeBy(“εςʔΩ”)
 .map(recipes -> { /* todo something */

    })
 .subscribeOn(Schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())
 .map(recipes -> { /* todo something */ }) .observeOn(Schedulers.io()) .subscribe(recipes -> {});  0CTFSWBCMFַ׵ちֹ⳿ׁ׸׋⦼׾「ֽ《׷أٖحس׾ⴖ׶剏ִ׷  䭷㹀ׁ׸׋皘䨽״׶♴ךؔلٖ٦ة٦ךأٖحسָ㢌刿ׁ׸׷  ًاحسثؑ٦ٝך⚥ד醱侧㔐ㄎן⳿ֿׅה׮⳿勻׷ ٙ٦ؕ٦أٖحس  ד㹋遤ׁ׸׷ 6*أٖحسד㹋遤ׁ׸׷ ٙ٦ؕ٦أٖحس  ד㹋遤ׁ׸׷ ➭ךꟚ涪罏ָ幉✉׃ַיזְךדծPCTFSWF0O׾醱侧㔐ㄎעךכ֮ת׶⢪ְ׋ֻזְדׅיկ
  64. 4DIFEVMFSⵃ欽儗ךذٝفٖ 4DIFEVMFSך䭷㹀ך״ֻ֮׷ػة٦ٝ searchRecipeBy(“εςʔΩ”)
 .map(recipes -> { /* todo something */

    })
 .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> {}); 0CTFSWBCMF⿹ןNBQזוךؔلٖ٦ة٦ָٙ٦ؕ٦أٖحسד㹋遤ׁ׸ծ
 TVCTDSJCFח床׃׋4VCTDSJCFS "DUJPO ָ6*أٖحسד㹋遤ׁ׸תׅկ
  65. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”)
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addToList(recipes); }, throwable

    -> { showErrorMessage(t); } ); ٖءؾ嗚稊ך㹋鄲ח4DIFEVMFSך䭷㹀׾鎸鶢 铣׫鴥׿דְתׅ ֿ׸דծ0CTFSWBCMF⻉ ׉ךㄎ⳿׃תדָ姻׃ֻ遤׻׸׷״ֲחז׶ת׃׋կ
  66. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”)
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addToList(recipes); }, throwable

    -> { showErrorMessage(t); } ); ٖءؾ嗚稊ך㹋鄲ח4DIFEVMFSך䭷㹀׾鎸鶢 铣׫鴥׿דְתׅ ֿ׸דծ0CTFSWBCMF⻉ ׉ךㄎ⳿׃תדָ姻׃ֻ遤׻׸׷״ֲחז׶ת׃׋կ
  67. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”)
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addToList(recipes); }, throwable

    -> { showErrorMessage(t); } ); ٖءؾ嗚稊ך㹋鄲ח4DIFEVMFSך䭷㹀׾鎸鶢 ֿ׸דծ0CTFSWBCMF⻉ ׉ךㄎ⳿׃תדָ姻׃ֻ遤׻׸׷״ֲחז׶ת׃׋կ
  68. 3Y+BWB㼪Ⰵך㛇燉 searchRecipe(“εςʔΩ”)
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addToList(recipes); }, throwable

    -> { showErrorMessage(t); } ); ٖءؾ嗚稊ך㹋鄲ח4DIFEVMFSך䭷㹀׾鎸鶢 ! ! ! ! ֿ׸דծ0CTFSWBCMF⻉ ׉ךㄎ⳿׃תדָ姻׃ֻ遤׻׸׷״ֲחז׶ת׃׋կ
  69. HFU"DUJWJUZOVMM㉏겗 HFU"DUJWJUZ OVMM㉏겗

  70. HFU"DUJWJUZOVMM㉏겗 HFU"DUJWJUZ OVMM㉏겗הכ 'SBHNFOUⰻךꬊず劍Ⳣ椚ָ鵤׏גֻ׷⵸חծ
 "DUJWJUZָ灶唱ׁ׸׷הծ؝٦ٕغحؙⰻד鍑佝ׁ׸׋ ؎ٝأةٝأח،ؙإأ׃׋㜥さضٕهָ涪欰ׅ׷

  71. HFU"DUJWJUZOVMM㉏겗 searchRecipeBy(“ϋϯόʔά”, new Callback() { @Override public void onSuccess(List<Recipe> recipes)

    {
 if(getActivity() == null) { return; }
 addToList(recipes); } @Override public void onError(Throwable t) {
 if(getActivity() == null) { return; } showErrorMessage(t); } });
 } HFU"DUJWJUZ OVMM㉏겗ח㼎䘔 ꬊず劍؝٦ٕغحؙ晛
  72. HFU"DUJWJUZOVMM㉏겗 3Y+BWBדꟚ涪ׅ׷㜥さכծ
 USFMMP3Y-JGFDZDMF׾⢪׏ג㼎䘔׃ת׃׳ֲ 4VCTDSJQUJPO׾ⵃ欽ׅ׷倯岀ָ♧菙涸דָׅծعؤه؎ٝزך㼰זְ3Y-JGFDZDMF׾稱➜׃תׅկ # app/build.gradle
 dependencies {
 compile 'com.trello:rxlifecycle:0.4.0'

    compile 'com.trello:rxlifecycle-components:0.4.0'
 }
  73. HFU"DUJWJUZOVMM㉏겗 searchRecipeBy(“ϋϯόʔά”) .compose(bindToLifecycle())
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addList(recipes); },

    throwable -> { showErrorMessage(t); } ); HFU"DUJWJUZ OVMM㉏겗ח㼎䘔 3Y晛 3Y"DUJWJUZ׾竰䪫ׅ׷䗳銲ָ֮׶תָׅծ傀㶷ך#BTF"DUJWJUZח穈׫鴥׬ֿה׮㺁僒דׅկ 铣׫鴥׿דְתׅ
  74. HFU"DUJWJUZOVMM㉏겗 searchRecipeBy(“ϋϯόʔά”) .compose(bindToLifecycle())
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addList(recipes); },

    throwable -> { showErrorMessage(t); } ); HFU"DUJWJUZ OVMM㉏겗ח㼎䘔 3Y晛 3Y"DUJWJUZ׾竰䪫ׅ׷䗳銲ָ֮׶תָׅծ傀㶷ך#BTF"DUJWJUZח穈׫鴥׬ֿה׮㺁僒דׅկ 铣׫鴥׿דְתׅ
  75. HFU"DUJWJUZOVMM㉏겗 searchRecipeBy(“ϋϯόʔά”) .compose(bindToLifecycle())
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addList(recipes); },

    throwable -> { showErrorMessage(t); } ); HFU"DUJWJUZ OVMM㉏겗ח㼎䘔 3Y晛 3Y"DUJWJUZ׾竰䪫ׅ׷䗳銲ָ֮׶תָׅծ傀㶷ך#BTF"DUJWJUZח穈׫鴥׬ֿה׮㺁僒דׅկ
  76. HFU"DUJWJUZOVMM㉏겗 searchRecipeBy(“ϋϯόʔά”) .compose(bindToLifecycle())
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addList(recipes); },

    throwable -> { showErrorMessage(t); } ); HFU"DUJWJUZ OVMM㉏겗ח㼎䘔 3Y晛 3Y"DUJWJUZ׾竰䪫ׅ׷䗳銲ָ֮׶תָׅծ傀㶷ך#BTF"DUJWJUZח穈׫鴥׬ֿה׮㺁僒דׅկ ! ! ! !
  77. HFU"DUJWJUZOVMM㉏겗 searchRecipeBy(“ϋϯόʔά”) .compose(bindToLifecycle())
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addList(recipes); },

    throwable -> { showErrorMessage(t); } ); ׮׃ծٖءؾ嗚稊穠卓ָ鵤׏גֻ׷⵸ח歗꬗ָ䨱׏גְ׋׵ծ 铣׫鴥׿דְתׅ 3Y"DUJWJUZ׾竰䪫ׅ׷䗳銲ָ֮׶תָׅծ傀㶷ך#BTF"DUJWJUZח穈׫鴥׬ֿה׮㺁僒דׅկ
  78. HFU"DUJWJUZOVMM㉏겗 searchRecipeBy(“ϋϯόʔά”) .compose(bindToLifecycle())
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addList(recipes); },

    throwable -> { showErrorMessage(t); } ); ׮׃ծٖءؾ嗚稊穠卓ָ鵤׏גֻ׷⵸ח歗꬗ָ䨱׏גְ׋׵ծ 3Y"DUJWJUZ׾竰䪫ׅ׷䗳銲ָ֮׶תָׅծ傀㶷ך#BTF"DUJWJUZח穈׫鴥׬ֿה׮㺁僒דׅկ
  79. HFU"DUJWJUZOVMM㉏겗 searchRecipeBy(“ϋϯόʔά”) .compose(bindToLifecycle())
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addList(recipes); },

    throwable -> { showErrorMessage(t); } ); ׮׃ծٖءؾ嗚稊穠卓ָ鵤׏גֻ׷⵸ח歗꬗ָ䨱׏גְ׋׵ծ מהא⵸ך歗꬗ָ
 邌爙ׁ׸גְ׷ 3Y"DUJWJUZ׾竰䪫ׅ׷䗳銲ָ֮׶תָׅծ傀㶷ך#BTF"DUJWJUZח穈׫鴥׬ֿה׮㺁僒דׅկ
  80. HFU"DUJWJUZOVMM㉏겗 searchRecipeBy(“ϋϯόʔά”) .compose(bindToLifecycle())
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe(recipes -> { addList(recipes); },

    throwable -> { showErrorMessage(t); } ); ׮׃ծٖءؾ嗚稊穠卓ָ鵤׏גֻ׷⵸ח歗꬗ָ䨱׏גְ׋׵ծ מהא⵸ך歗꬗ָ
 邌爙ׁ׸גְ׷ Y TVCTDSJCFⰻךⳢ椚כㄎל׸זְ 3Y"DUJWJUZ׾竰䪫ׅ׷䗳銲ָ֮׶תָׅծ傀㶷ך#BTF"DUJWJUZח穈׫鴥׬ֿה׮㺁僒דׅկ
  81. 0CTFSWBCMFחׅ׷ًٔحز 0CTFSWBCMFח׃׋ֿהדծ
 醱꧟ז➬圫׮㹑鎉涸ח剅ֽ׷״ֲחז׏׋կ 鑐׃ח堣腉׾鷄⸇׃גְֹת׃׳ֲ

  82. 倜堣腉ך鷄⸇  չא湡ך単חؗ٦ٙ٦س鸬⹛㘗ך䎢デⰅ׸׷պ 倜堣腉ך鷄⸇׉ך

  83. ؗ٦ٙ٦س鸬⹛㘗䎢デחאְג 暴㹀ךؗ٦ٙ٦سָ嗚稊ׁ׸׋儗׌ֽ
 א׭ך単ָ䎢デחⴖ׶剏׻׷ չؗ٦ٙ٦س鸬⹛㘗䎢デպך➬圫 䎢デ䞔㜠כⴽך"1*חؙٔؒأزׅ׷䗳銲ָ֮׷

  84. ؗ٦ٙ٦س鸬⹛㘗䎢デך䮶׷莸ְ չةو؞պה嗚稊׃ג׮邌爙ׁ׸זְ # # # # չأذ٦ؗպה嗚稊ׅ׷ה邌爙ׁ׸׷ !  !

    !
  85. ؗ٦ٙ٦س鸬⹛㘗䎢デך䮶׷莸ְ չةو؞պה嗚稊׃ג׮邌爙ׁ׸זְ # # # # չأذ٦ؗպה嗚稊ׅ׷ה邌爙ׁ׸׷ !  !

    !
  86. ״ֻזְ㹋鄲ך⢽ ״ֻזְ⢽ ٖءؾה䎢デ׾׉׸׊׸杝甧ח铣׫鴥׿ד邌爙ׇׁ׋㜥さ ! ! ! أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךꟼ鸬ך䎢デ׾《䖤 չأذ٦ؗպד嗚稊 铣׫鴥׿דְתׅ

  87. ״ֻזְ㹋鄲ך⢽ ״ֻזְ⢽ ٖءؾה䎢デ׾׉׸׊׸杝甧ח铣׫鴥׿ד邌爙ׇׁ׋㜥さ ! ! ! أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךꟼ鸬ך䎢デ׾《䖤 嗚稊歗꬗חٖءؾ׾鷄⸇ չأذ٦ؗպד嗚稊

    铣׫鴥׿דְתׅ
  88. ״ֻזְ㹋鄲ך⢽ ״ֻזְ⢽ ٖءؾה䎢デ׾׉׸׊׸杝甧ח铣׫鴥׿ד邌爙ׇׁ׋㜥さ ! ! ! أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךꟼ鸬ך䎢デ׾《䖤 嗚稊歗꬗חٖءؾ׾鷄⸇ չأذ٦ؗպד嗚稊

  89. ״ֻזְ㹋鄲ך⢽ ״ֻזְ⢽ ٖءؾה䎢デ׾׉׸׊׸杝甧ח铣׫鴥׿ד邌爙ׇׁ׋㜥さ ! ! ! أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךꟼ鸬ך䎢デ׾《䖤 嗚稊歗꬗חٖءؾ׾鷄⸇ չأذ٦ؗպד嗚稊

  90. ״ֻזְ㹋鄲ך⢽ ״ֻזְ⢽ ٖءؾה䎢デ׾׉׸׊׸杝甧ח铣׫鴥׿ד邌爙ׇׁ׋㜥さ ! ! ! أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךꟼ鸬ך䎢デ׾《䖤 嗚稊歗꬗חٖءؾ׾鷄⸇ չأذ٦ؗպד嗚稊

  91. ״ֻזְ㹋鄲ך⢽ ״ֻזְ⢽ ٖءؾה䎢デ׾׉׸׊׸杝甧ח铣׫鴥׿ד邌爙ׇׁ׋㜥さ ! ! ! أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךꟼ鸬ך䎢デ׾《䖤 嗚稊歗꬗חٖءؾ׾鷄⸇ 嗚稊歗꬗ך媮湡ח䎢デ׾䯏Ⰵ

    չأذ٦ؗպד嗚稊
  92. ״ֻזְ㹋鄲ך⢽ ״ֻזְ⢽ ٖءؾה䎢デ׾׉׸׊׸杝甧ח铣׫鴥׿ד邌爙ׇׁ׋㜥さ ! ! ! أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךꟼ鸬ך䎢デ׾《䖤 嗚稊歗꬗חٖءؾ׾鷄⸇ 嗚稊歗꬗ך媮湡ח䎢デ׾䯏Ⰵ

    չأذ٦ؗպד嗚稊
  93. ״ֻזְ㹋鄲ך⢽ ״ֻזְ⢽ ٖءؾה䎢デ׾׉׸׊׸杝甧ח铣׫鴥׿ד邌爙ׇׁ׋㜥さ ! ! ! أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךꟼ鸬ך䎢デ׾《䖤 嗚稊歗꬗חٖءؾ׾鷄⸇ 嗚稊歗꬗ך媮湡ח䎢デ׾䯏Ⰵ

    չأذ٦ؗպד嗚稊 
  94. ״ֻזְ㹋鄲ך⢽ ״ֻזְ⢽ ٖءؾה䎢デ׾׉׸׊׸杝甧ח铣׫鴥׿ד邌爙ׇׁ׋㜥さ ! ! ! أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךꟼ鸬ך䎢デ׾《䖤 嗚稊歗꬗חٖءؾ׾鷄⸇ 嗚稊歗꬗ך媮湡ח䎢デ׾䯏Ⰵ

    չأذ٦ؗպד嗚稊  铎ةحف׾涪欰׃װְׅ6*כ鼘ֽ׋ְ
  95. 椚䟝涸ז㹋鄲ך⢽ ⢽ չأذ٦ؗպה嗚稊ׅ׷הא湡ך単ָꟼ鸬׃׋䎢デחז׷ չأذ٦ؗպד嗚稊 أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךٖءؾ׾邌爙׃אאծא湡ח䎢デ׾邌爙ׇׁ׷ أذ٦ؗا٦أך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚

  96. 椚䟝涸ז㹋鄲ך⢽ ⢽ չأذ٦ؗպה嗚稊ׅ׷הא湡ך単ָꟼ鸬׃׋䎢デחז׷ ! չأذ٦ؗպד嗚稊 أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךٖءؾ׾邌爙׃אאծא湡ח䎢デ׾邌爙ׇׁ׷ أذ٦ؗا٦أך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚

  97. 椚䟝涸ז㹋鄲ך⢽ ⢽ չأذ٦ؗպה嗚稊ׅ׷הא湡ך単ָꟼ鸬׃׋䎢デחז׷ !  չأذ٦ؗպד嗚稊 أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךٖءؾ׾邌爙׃אאծא湡ח䎢デ׾邌爙ׇׁ׷ أذ٦ؗا٦أך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚

  98. 椚䟝涸ז㹋鄲ך⢽ ⢽ չأذ٦ؗպה嗚稊ׅ׷הא湡ך単ָꟼ鸬׃׋䎢デחז׷ !  ! չأذ٦ؗպד嗚稊 أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךٖءؾ׾邌爙׃אאծא湡ח䎢デ׾邌爙ׇׁ׷ أذ٦ؗا٦أך䎢デ׾《䖤

    䖉׍さ׻ׇⳢ椚
  99. 椚䟝涸ז㹋鄲ך⢽ ⢽ չأذ٦ؗպה嗚稊ׅ׷הא湡ך単ָꟼ鸬׃׋䎢デחז׷ !  ! ! չأذ٦ؗպד嗚稊 أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗךٖءؾ׾邌爙׃אאծא湡ח䎢デ׾邌爙ׇׁ׷

    أذ٦ؗا٦أך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚
  100. 䖉׍さ׻ׇⳢ椚 椚䟝涸ז㹋鄲ך⢽ ⢽ չأذ٦ؗպה嗚稊ׅ׷הא湡ך単ָꟼ鸬׃׋䎢デחז׷ !  ! ! չأذ٦ؗպד嗚稊 أذ٦ؗךٖءؾ׾《䖤

    أذ٦ؗךٖءؾ׾邌爙׃אאծא湡ח䎢デ׾邌爙ׇׁ׷ أذ٦ؗا٦أך䎢デ׾《䖤
  101. 3Y+BWBדך䖉׍さ׻ׇⳢ椚 DPNCJOF-BUFTU 0CTFSWBCMF 0CTFSWBCMF 'VOD 3Y+BWBדך⚛⴨Ⳣ椚 Observable.combineLatest(
 Observable.just(1),
 Observable.just(2),
 (i1,i2)

    -> i1 + i2 // ͜ͷ৔߹ɺ3͕࣍ͷΦϖϨʔλʔʹ౉Δ
 ); אך0CTFSWBCMFךⳢ椚׾䖉׍ծ「ֽ《׏׋⦼׾'VODד⦼׾さ䧭ׅ׷ؔلٖ٦ة٦
  102. 3Y+BWBדך⚛⴨Ⳣ椚 Observable.combineLatest(
 Observable.just(1),
 Observable.just(2),
 (i1,i2) -> Pair.create(i1, i2)
 ); Observable.combineLatest(


    Observable.just(1),
 Observable.just(2),
 Pair::create
 ); DPNCJOF-BUFTUה1BJS׾⢪׏׋䖉׍さ׻ׇⳢ椚 ٓيت䒭ך䒷侧הًاحسך⟎䒷侧ָ♧荜׃׋㜥さחכծ♴ך״ֲחًاحسٔؿ؋ٖٝأהְֲ俑岀ָ⢪ִ׷կ
  103. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), // ޿ࠂ৘ใΛऔಘ͢ΔϝιουͩͱࢥͬͯԼ͍͞ Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())

    .subscribe(pair -> { addToListWithBannerIfExist(pair.first, pair.second); }, throwable -> { showErrorMessage(t); } ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊 ꟼ鸬䎢デך嗚稊 DPNCJOF-BUFTUך➿׻׶ח[JQؔلٖ٦ة٦׾⢪ֲֿה׮⳿勻תׅկ
  104. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), // ޿ࠂ৘ใΛऔಘ͢ΔϝιουͩͱࢥͬͯԼ͍͞ Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())

    .subscribe(pair -> { addToListWithBannerIfExist(pair.first, pair.second); }, throwable -> { showErrorMessage(t); } ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊 ꟼ鸬䎢デך嗚稊 DPNCJOF-BUFTUך➿׻׶ח[JQؔلٖ٦ة٦׾⢪ֲֿה׮⳿勻תׅկ
  105. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), // ޿ࠂ৘ใΛऔಘ͢ΔϝιουͩͱࢥͬͯԼ͍͞ Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())

    .subscribe(pair -> { addToListWithBannerIfExist(pair.first, pair.second); }, throwable -> { showErrorMessage(t); } ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊 ꟼ鸬䎢デך嗚稊 DPNCJOF-BUFTUך➿׻׶ח[JQؔلٖ٦ة٦׾⢪ֲֿה׮⳿勻תׅկ
  106. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), // ޿ࠂ৘ใΛऔಘ͢ΔϝιουͩͱࢥͬͯԼ͍͞ Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())

    .subscribe(pair -> { addToListWithBannerIfExist(pair.first, pair.second); }, throwable -> { showErrorMessage(t); } ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊 ꟼ鸬䎢デך嗚稊 DPNCJOF-BUFTUך➿׻׶ח[JQؔلٖ٦ة٦׾⢪ֲֿה׮⳿勻תׅկ
  107. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), // ޿ࠂ৘ใΛऔಘ͢ΔϝιουͩͱࢥͬͯԼ͍͞ Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())

    .subscribe(pair -> { addToListWithBannerIfExist(pair.first, pair.second); }, throwable -> { showErrorMessage(t); } ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊 ꟼ鸬䎢デך嗚稊 DPNCJOF-BUFTUך➿׻׶ח[JQؔلٖ٦ة٦׾⢪ֲֿה׮⳿勻תׅկ
  108. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), // ޿ࠂ৘ใΛऔಘ͢ΔϝιουͩͱࢥͬͯԼ͍͞ Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())

    .subscribe(pair -> { addToListWithBannerIfExist(pair.first, pair.second); }, throwable -> { showErrorMessage(t); } ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊 ꟼ鸬䎢デך嗚稊 ٖءؾךٔأز DPNCJOF-BUFTUך➿׻׶ח[JQؔلٖ٦ة٦׾⢪ֲֿה׮⳿勻תׅկ
  109. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), // ޿ࠂ৘ใΛऔಘ͢ΔϝιουͩͱࢥͬͯԼ͍͞ Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())

    .subscribe(pair -> { addToListWithBannerIfExist(pair.first, pair.second); }, throwable -> { showErrorMessage(t); } ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊 ꟼ鸬䎢デך嗚稊 ٖءؾךٔأز DPNCJOF-BUFTUך➿׻׶ח[JQؔلٖ٦ة٦׾⢪ֲֿה׮⳿勻תׅկ
  110. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), // ޿ࠂ৘ใΛऔಘ͢ΔϝιουͩͱࢥͬͯԼ͍͞ Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())

    .subscribe(pair -> { addToListWithBannerIfExist(pair.first, pair.second); }, throwable -> { showErrorMessage(t); } ); ⢽ չأذ٦ؗպךٖءؾ׾嗚稊 ꟼ鸬䎢デך嗚稊 ٖءؾךٔأز 䎢デך䞔㜠 DPNCJOF-BUFTUך➿׻׶ח[JQؔلٖ٦ة٦׾⢪ֲֿה׮⳿勻תׅկ
  111. DPNCJOF-BUJTU׾⢪ֲꥷך岣䠐挿 DPNCJOF-BUFTU׾⢪ֲהֹך岣䠐挿 ˖ 晙倯ךⳢ椚ָ㣟侁ׅ׷הPO&SSPSָㄎל׸׷㉏겗 ˖ ⚛⴨Ⳣ椚ׅ׷0CTFSWBCMFך㹋遤أٖحسך㉏겗

  112. DPNCJOF-BUJTU׾⢪ֲꥷך岣䠐挿 ⢽ ٖءؾך《䖤ח䧭⸆ծ䎢デך《䖤ח㣟侁ך㜥さ չأذ٦ؗպד嗚稊 ٔٗ٦سׅ׷ 铣׫鴥׫ח㣟侁׃ת׃׋ 铣׫鴥׿דְתׅ

  113. DPNCJOF-BUJTU׾⢪ֲꥷך岣䠐挿 ⢽ ٖءؾך《䖤ח䧭⸆ծ䎢デך《䖤ח㣟侁ך㜥さ չأذ٦ؗպד嗚稊 أذ٦ؗךٖءؾ׾《䖤 ٔٗ٦سׅ׷ 铣׫鴥׫ח㣟侁׃ת׃׋ 铣׫鴥׿דְתׅ

  114. DPNCJOF-BUJTU׾⢪ֲꥷך岣䠐挿 ⢽ ٖءؾך《䖤ח䧭⸆ծ䎢デך《䖤ח㣟侁ך㜥さ չأذ٦ؗպד嗚稊 أذ٦ؗךٖءؾ׾《䖤 䎢デ䞔㜠ך铣׫鴥׫ח㣟侁 ٔٗ٦سׅ׷ 铣׫鴥׫ח㣟侁׃ת׃׋ 铣׫鴥׿דְתׅ

  115. DPNCJOF-BUJTU׾⢪ֲꥷך岣䠐挿 ⢽ ٖءؾך《䖤ח䧭⸆ծ䎢デך《䖤ח㣟侁ך㜥さ չأذ٦ؗպד嗚稊 أذ٦ؗךٖءؾ׾《䖤 䎢デ䞔㜠ך铣׫鴥׫ח㣟侁 PO&SSPSָㄎל׸ծⱄ铣׫鴥׫歗꬗ָ邌爙ׁ׸׷ " ٔٗ٦سׅ׷ 铣׫鴥׫ח㣟侁׃ת׃׋

    铣׫鴥׿דְתׅ
  116. DPNCJOF-BUJTU׾⢪ֲꥷך岣䠐挿 ⢽ ٖءؾך《䖤ח䧭⸆ծ䎢デך《䖤ח㣟侁ך㜥さ չأذ٦ؗպד嗚稊 أذ٦ؗךٖءؾ׾《䖤 䎢デ䞔㜠ך铣׫鴥׫ח㣟侁 PO&SSPSָㄎל׸ծⱄ铣׫鴥׫歗꬗ָ邌爙ׁ׸׷ " ٔٗ٦سׅ׷ 铣׫鴥׫ח㣟侁׃ת׃׋

  117. DPNCJOF-BUJTU׾⢪ֲꥷך岣䠐挿 ⢽ ٖءؾך《䖤ח䧭⸆ծ䎢デך《䖤ח㣟侁ך㜥さ չأذ٦ؗպד嗚稊 أذ٦ؗךٖءؾ׾《䖤 䎢デ䞔㜠ך铣׫鴥׫ח㣟侁 PO&SSPSָㄎל׸ծⱄ铣׫鴥׫歗꬗ָ邌爙ׁ׸׷ " ٔٗ٦سׅ׷ 铣׫鴥׫ח㣟侁׃ת׃׋

    ٖءؾ䞔㜠כ《䖤דֹגְ׷ךדծ䎢デָ㣟侁׃ג׮ٔأزכ邌爙׃׋ְ
  118. 3Y+BWBדךؒٓ٦Ⳣ椚 PO&SSPS3FUVSO 'VOD5ISPXBCMF  FYUFOET5 3Y+BWBדךؒٓ٦Ⳣ椚  AdObservable(“λϚΰ”) .onErrorReturn(throwable ->

    AdModel.EmptyData()); PO&SSPS3FUVSO׾㹀纏ׅ׷ֿהדծ4VCTDSJCFSחFSSPSָ鸐濼ׁ׸זֻז׶תׅկ
  119. 䎢デ׾《䖤ׅ׷0CTFSWBCMF׾何葺ׅ׷  public Observable<AdModel> searchAd(String keyword) { return Observable.create(subscriber ->

    { try{
 AdModel adModel = adClient.search(keyword); subscriber.onNext(adModel); } catch(HttpException e) {
 subscriber.onError(e);
 }) .onErrorReturn(e -> { return AdModel.createEmptyData();
 }); } 䎢デ׾嗚稊ׅ׷0CTFSWBCMFחؒٓ٦Ⳣ椚׾鷄⸇ׅ׷
  120. 䎢デ׾《䖤ׅ׷0CTFSWBCMF׾何葺ׅ׷  public Observable<AdModel> searchAd(String keyword) { return Observable.create(subscriber ->

    { try{
 AdModel adModel = adClient.search(keyword); subscriber.onNext(adModel); } catch(HttpException e) {
 subscriber.onError(e);
 }) .onErrorReturn(e -> { return AdModel.createEmptyData();
 }); } 䎢デ׾嗚稊ׅ׷0CTFSWBCMFחؒٓ٦Ⳣ椚׾鷄⸇ׅ׷
  121. 䎢デ׾《䖤ׅ׷0CTFSWBCMF׾何葺ׅ׷  public Observable<AdModel> searchAd(String keyword) { return Observable.create(subscriber ->

    { try{
 AdModel adModel = adClient.search(keyword); subscriber.onNext(adModel); } catch(HttpException e) {
 subscriber.onError(e);
 }) .onErrorReturn(e -> { return AdModel.createEmptyData();
 }); } 䎢デ׾嗚稊ׅ׷0CTFSWBCMFחؒٓ٦Ⳣ椚׾鷄⸇ׅ׷
  122. 䎢デ׾《䖤ׅ׷0CTFSWBCMF׾何葺ׅ׷  public Observable<AdModel> searchAd(String keyword) { return Observable.create(subscriber ->

    { try{
 AdModel adModel = adClient.search(keyword); subscriber.onNext(adModel); } catch(HttpException e) {
 subscriber.onError(e);
 }) .onErrorReturn(e -> { return AdModel.createEmptyData();
 }); } 䎢デ׾嗚稊ׅ׷0CTFSWBCMFחؒٓ٦Ⳣ椚׾鷄⸇ׅ׷ ⢽㢩ָ涪欰׃׋㜥さַ׵ך瑞ךر٦ة٦׾鵤ׅ
  123. 䎢デ׾《䖤ׅ׷0CTFSWBCMF׾何葺ׅ׷  public Observable<AdModel> searchAd(String keyword) { return Observable.create(subscriber ->

    { try{
 AdModel adModel = adClient.search(keyword); subscriber.onNext(adModel); } catch(HttpException e) {
 subscriber.onError(e);
 }) .onErrorReturn(e -> { return AdModel.createEmptyData();
 }); } 䎢デ׾嗚稊ׅ׷0CTFSWBCMFחؒٓ٦Ⳣ椚׾鷄⸇ׅ׷ ⢽㢩ָ涪欰׃׋㜥さַ׵ך瑞ךر٦ة٦׾鵤ׅ PO&SSPSָㄎל׸זֻז׶ծPO/FYUח瑞ך䎢デ䞔㜠ָ床׷״ֲחז׷
  124. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe( /*

    লུ */ ); ⚛⴨Ⳣ椚ׅ׷0CTFSWBCMFך㹋遤أٖحسך㉏겗 ˖ TFBSDI3FDJQF הTFBSDI"E כTVCTDSJCF0Oָ劢䭷㹀ך朐䡾կ ˖ ֿך㜥さDPNCJOF-BUJTUך⚥魦כ♧אךأٖحسד㹋遤ׁ׸׷կ DPNCJOF-BUJTUכ⚛⴨Ⳣ椚׃׋ְָծأٖحسָـٗحׁؙ׸גְג⚛⴨Ⳣ椚חז׵זְ✲ָ֮׶תׅկ
  125. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe( /*

    লུ */ ); ⚛⴨Ⳣ椚ׅ׷0CTFSWBCMFך㹋遤أٖحسך㉏겗 ˖ TFBSDI3FDJQF הTFBSDI"E כTVCTDSJCF0Oָ劢䭷㹀ך朐䡾կ ˖ ֿך㜥さDPNCJOF-BUJTUך⚥魦כ♧אךأٖحسד㹋遤ׁ׸׷կ DPNCJOF-BUJTUכ⚛⴨Ⳣ椚׃׋ְָծأٖحسָـٗحׁؙ׸גְג⚛⴨Ⳣ椚חז׵זְ✲ָ֮׶תׅկ
  126. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe( /*

    লུ */ ); ⚛⴨Ⳣ椚ׅ׷0CTFSWBCMFך㹋遤أٖحسך㉏겗 ˖ TFBSDI3FDJQF הTFBSDI"E כTVCTDSJCF0Oָ劢䭷㹀ך朐䡾կ ˖ ֿך㜥さDPNCJOF-BUJTUך⚥魦כ♧אךأٖحسד㹋遤ׁ׸׷կ DPNCJOF-BUJTUכ⚛⴨Ⳣ椚׃׋ְָծأٖحسָـٗحׁؙ׸גְג⚛⴨Ⳣ椚חז׵זְ✲ָ֮׶תׅկ
  127. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe( /*

    লུ */ ); ⚛⴨Ⳣ椚ׅ׷0CTFSWBCMFך㹋遤أٖحسך㉏겗 ˖ TFBSDI3FDJQF הTFBSDI"E כTVCTDSJCF0Oָ劢䭷㹀ך朐䡾կ ˖ ֿך㜥さDPNCJOF-BUJTUך⚥魦כ♧אךأٖحسד㹋遤ׁ׸׷կ DPNCJOF-BUJTUכ⚛⴨Ⳣ椚׃׋ְָծأٖحسָـٗحׁؙ׸גְג⚛⴨Ⳣ椚חז׵זְ✲ָ֮׶תׅկ
  128. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”), searchAd(“εςʔΩ”), Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe( /*

    লུ */ ); ⚛⴨Ⳣ椚ׅ׷0CTFSWBCMFך㹋遤أٖحسך㉏겗 ˖ TFBSDI3FDJQF הTFBSDI"E כTVCTDSJCF0Oָ劢䭷㹀ך朐䡾կ ˖ ֿך㜥さDPNCJOF-BUJTUך⚥魦כ♧אךأٖحسד㹋遤ׁ׸׷կ TFBSDI3FDJQFךⳢ椚ָ穄✪׃׋䖓ח㹋遤ׁ׸׷ DPNCJOF-BUJTUכ⚛⴨Ⳣ椚׃׋ְָծأٖحسָـٗحׁؙ׸גְג⚛⴨Ⳣ椚חז׵זְ✲ָ֮׶תׅկ
  129. 嗚稊歗꬗ך㹋鄲ךⰋ⡤⫷ Observable.combineLatest( searchRecipe(“εςʔΩ”).subscribeOn(schedulers.io()), searchAd(“εςʔΩ”).subscribeOn(schedulers.io()), Pair::create )
 .subscribeOn(schedulers.io())
 .observeOn(AndroidSchedulers.mainThread()) .subscribe( /*

    লུ */ ); ⚛⴨Ⳣ椚ׅ׷0CTFSWBCMFך㹋遤أٖحسך㉏겗 ⚥魦ך0CTFSWBCMFח׮TVCTDSJCF0O׾䭷㹀׃גծ׉׸׊׸חⴽأٖحس׾ⶴ׶䔲ג׷ DPNCJOF-BUJTUך⚥魦ָ⚛⴨Ⳣ椚ׁ׸׷״ֲחז׏׋կ
  130. 瑱搫ךֶ격ְ չ䎢デBQJ؟٦غ٦כ♧儗涸ח♶㸜㹀זךד
 㔐תדٔزٓ؎Ⳣ椚׾׃גֻ׌ְׁպ 瑱搫ך䎢デث٦يַ׵ךֶ격ְ

  131. 3Y+BWBדךؒٓ٦Ⳣ椚  SFUSZ MPOH 3Y+BWBדךؒٓ٦Ⳣ椚  AdObservable(“λϚΰ”) .retry(1); // ྫ֎͕ൃੜͨ͠৔߹̍ճ͚ͩϦτϥΠ͢Δ

    SFUSZ 'VOD*OUFHFS 5ISPXBCMF #PPMFBOQSFEJDBUF AdObservable(“λϚΰ”) .retry((count, throwable) -> count > 2)
  132. 䎢デ׾《䖤ׅ׷0CTFSWBCMF׾何葺ׅ׷  
 public Observable<AdModel> searchAd(String keyword) { return Observable.create(subscriber

    -> { try{
 AdModel ad = AdClient.search(keyword); subscriber.onNext(ad); } catch(HttpException e) {
 subscriber.onError(e);
 }) .retry(1) .onErrorReturn(e -> { return AdModel.createEmptyData();
 }); } 䎢デ׾嗚稊ׅ׷0CTFSWBCMF׾刿ח何葺ׅ׷ ٔزٓ؎ך鷄⸇
  133. 倜堣腉ך鷄⸇  չ嗚稊歗꬗ח-JLFنةٝ׾鷄⸇׃ת׃׳ֲպ 倜堣腉ך鷄⸇׉ך

  134. -JLFنةٝך➬圫  〸♳ח-JLFنةָٝ鷄⸇ׁ׸׷  نةٝ׾䬃ׅהֶ孡חⰅ׶ח⥂㶷ׁ׸׷  -JLFך朐䡾כⴽ"1*ד《䖤 -JLFنةٝך➬圫  !

    ! ! -JLF"1*ך➬圫 ٖءؾ*Eךٔأز׾鷏׷הծ
 傀ח⥂㶷׃גְ׷ٖءؾ*Eָ鵤׏גֻ׷
  135. -JLFنةٝך➬圫  〸♳ח-JLFنةָٝ鷄⸇ׁ׸׷  نةٝ׾䬃ׅהֶ孡חⰅ׶ח⥂㶷ׁ׸׷  -JLFך朐䡾כⴽ"1*ד《䖤 -JLFنةٝך➬圫  !

    ! ! ♥ ♥ ♥ -JLF"1*ך➬圫 ٖءؾ*Eךٔأز׾鷏׷הծ
 傀ח⥂㶷׃גְ׷ٖءؾ*Eָ鵤׏גֻ׷
  136. ٖءؾ《䖤ךؿٗ٦ ٖءؾ䞔㜠ך《䖤ؿٗ٦  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ♧鋮׾《䖤 4FBSDI"1* -JLFך朐䡾׾《䖤 -JLF"1* ٖءؾر٦ةח-JLFך朐䡾׾و٦آ
  137. ٖءؾ《䖤ךؿٗ٦ ٖءؾ䞔㜠ך《䖤ؿٗ٦  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ♧鋮׾《䖤 4FBSDI"1* -JLFך朐䡾׾《䖤 -JLF"1* ٖءؾر٦ةח-JLFך朐䡾׾و٦آ ꬊず劍Ⳣ椚ך湫⴨⻉
  138. 3Y+BWBדך湫⴨⻉ BU.BQ 'VOD TVQFS5  FYUFOET0CTFSWBCMF 3Y+BWBדךꬊず劍Ⳣ椚ך湫⴨⻉ searchRecipe(“εςʔΩ”) .flatMap(recipes ->

    fetchLikedRecipeIds(recipes)) .subscribe(recipeIds -> {})
  139. 3Y+BWBדך湫⴨⻉ BU.BQ 'VOD TVQFS5  FYUFOET0CTFSWBCMF 3Y+BWBדךꬊず劍Ⳣ椚ך湫⴨⻉ searchRecipe(“εςʔΩ”) .flatMap(recipes ->

    fetchLikedRecipeIds(recipes)) .subscribe(recipeIds -> {})
  140. 3Y+BWBדך湫⴨⻉ BU.BQ 'VOD TVQFS5  FYUFOET0CTFSWBCMF 3Y+BWBדךꬊず劍Ⳣ椚ך湫⴨⻉ searchRecipe(“εςʔΩ”) .flatMap(recipes ->

    fetchLikedRecipeIds(recipes)) .subscribe(recipeIds -> {})
  141. 3Y+BWBדך湫⴨⻉ BU.BQ 'VOD TVQFS5  FYUFOET0CTFSWBCMF 3Y+BWBדךꬊず劍Ⳣ椚ך湫⴨⻉ searchRecipe(“εςʔΩ”) .flatMap(recipes ->

    fetchLikedRecipeIds(recipes)) .subscribe(recipeIds -> {})
  142. 湫䱸Ⳣ椚ה⚛⴨Ⳣ椚׾穈׫さ׻ׇ׷ BU.BQ 'VOD TVQFS5  FYUFOET0CTFSWBCMF ⚛⴨Ⳣ椚ה湫⴨Ⳣ椚׾さ׻ׇג⢪ֲ searchRecipe(“εςʔΩ”)
 .flatMap(recipes ->

    
 Observable.combineLatest( Observable.just(recipes), // ϨγϐϦετΛͦͷ··౉͢
 fetchLikedRecipe(recipes)), //ϨγϐϦετ͔ΒLikeͨ͠ϨγϐIdΛऔಘ Pair::create
 )
 )
 .map(this::mergeLikeState) // mapͰLikeঢ়ଶΛϨγϐΠϯελϯεʹ൓өͤ͞Δ(লུ) .subscribe(recipes -> {}) 0CTFSWBCMFKVTU Y כծY׾0CTFSWBCMFחֻ׷׬׌ֽךًاحسדׅկ DPNCJOF-BUFTU 0CTFSWBCMF 0CTFSWBCMF 'VOD
  143. 湫䱸Ⳣ椚ה⚛⴨Ⳣ椚׾穈׫さ׻ׇ׷ BU.BQ 'VOD TVQFS5  FYUFOET0CTFSWBCMF ⚛⴨Ⳣ椚ה湫⴨Ⳣ椚׾さ׻ׇג⢪ֲ searchRecipe(“εςʔΩ”)
 .flatMap(recipes ->

    
 Observable.combineLatest( Observable.just(recipes), // ϨγϐϦετΛͦͷ··౉͢
 fetchLikedRecipe(recipes)), //ϨγϐϦετ͔ΒLikeͨ͠ϨγϐIdΛऔಘ Pair::create
 )
 )
 .map(this::mergeLikeState) // mapͰLikeঢ়ଶΛϨγϐΠϯελϯεʹ൓өͤ͞Δ(লུ) .subscribe(recipes -> {}) 0CTFSWBCMFKVTU Y כծY׾0CTFSWBCMFחֻ׷׬׌ֽךًاحسדׅկ DPNCJOF-BUFTU 0CTFSWBCMF 0CTFSWBCMF 'VOD
  144. 湫䱸Ⳣ椚ה⚛⴨Ⳣ椚׾穈׫さ׻ׇ׷ BU.BQ 'VOD TVQFS5  FYUFOET0CTFSWBCMF ⚛⴨Ⳣ椚ה湫⴨Ⳣ椚׾さ׻ׇג⢪ֲ searchRecipe(“εςʔΩ”)
 .flatMap(recipes ->

    
 Observable.combineLatest( Observable.just(recipes), // ϨγϐϦετΛͦͷ··౉͢
 fetchLikedRecipe(recipes)), //ϨγϐϦετ͔ΒLikeͨ͠ϨγϐIdΛऔಘ Pair::create
 )
 )
 .map(this::mergeLikeState) // mapͰLikeঢ়ଶΛϨγϐΠϯελϯεʹ൓өͤ͞Δ(লུ) .subscribe(recipes -> {}) 0CTFSWBCMFKVTU Y כծY׾0CTFSWBCMFחֻ׷׬׌ֽךًاحسדׅկ DPNCJOF-BUFTU 0CTFSWBCMF 0CTFSWBCMF 'VOD
  145. 鷄⸇项俱 BU.BQ 'VOD TVQFS5  FYUFOET0CTFSWBCMF 鷄⸇项俱 湫⴨Ⳣ椚׌ֽדאזּػة٦ٝ searchRecipe(“εςʔΩ”)
 .flatMap(recipes

    -> {
 fetchLikedRecipe(recipes)
 .map(likeIds -> {
 mergeLikeState(recipes, likeIds);
 });
 }
 ) .subscribe(recipes -> {}) IUUQTUXJUUFSDPNUBLVKJTUBUVTׁ׿ך׀䭷䶯鸐׶NBQד籬־ג׮״ׁ׉ֲדׅיկ
  146. -JLF朐䡾תד锃ץ׷ٖءؾ《䖤ًاحس׾⡲׷ public Observable<List<Recipe>> searchRecipeWithLikeState(String keyword) { searchRecipe(keyword) .flatMap(recipes -> Observable.combineLatest(

    Observable.just(recipes), fetchLikedRecipeIds(recipes)), Pair::create ) ) .map(this::mergeLikeState) }
 public Func1<List<Recipe>> mergeLikeState(Pair<List<Recipe>, Integer> pair) {
 // Likeঢ়ଶΛϨγϐΠϯελϯεʹ൓өͤ͞Δ(লུ)
 } ٖءؾ׾嗚稊 MJLF朐屣׾锃ץ׷ًاحس׾⡲׷
  147. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 剑穄涸ז嗚稊歗꬗ךؿٗ٦׾然钠׃ת׃׳ֲկ

  148. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    䖉׍さ׻ׇⳢ椚
  149. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ׾《䖤 䖉׍さ׻ׇⳢ椚
  150. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ׾《䖤 䖉׍さ׻ׇⳢ椚 ٖءؾך-JLF朐䡾׾《䖤
  151. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ׾《䖤 䖉׍さ׻ׇⳢ椚 ٖءؾך-JLF朐䡾׾《䖤
  152. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ׾《䖤 䖉׍さ׻ׇⳢ椚 ٖءؾך-JLF朐䡾׾《䖤
  153. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗꟼ鸬ך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚 ٖءؾך-JLF朐䡾׾《䖤
  154. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗꟼ鸬ך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚 ٖءؾך-JLF朐䡾׾《䖤
  155. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗꟼ鸬ך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚 ٖءؾך-JLF朐䡾׾《䖤
  156. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗꟼ鸬ך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚 ٖءؾך-JLF朐䡾׾《䖤 剑㣐㔐ךٔزٓ؎Ⳣ椚
  157. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗꟼ鸬ך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚 ٖءؾך-JLF朐䡾׾《䖤 㣟侁׃׋㜥さַ׵瑞ر٦ة׾鵤ׅ 剑㣐㔐ךٔزٓ؎Ⳣ椚
  158. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗꟼ鸬ך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚 ٖءؾך-JLF朐䡾׾《䖤 㣟侁׃׋㜥さַ׵瑞ر٦ة׾鵤ׅ 剑㣐㔐ךٔزٓ؎Ⳣ椚
  159. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗꟼ鸬ך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚 ٖءؾך-JLF朐䡾׾《䖤 㣟侁׃׋㜥さַ׵瑞ر٦ة׾鵤ׅ 剑㣐㔐ךٔزٓ؎Ⳣ椚
  160. 剑穄涸ז嗚稊歗꬗ךؿٗ٦ 嗚稊歗꬗ך剑穄涸זؿٗ٦㔳  ! ! ! ♥ ♥ ♥ չأذ٦ؗպד嗚稊

    ׅץגך䞔㜠 ٖءؾ -JLF朐䡾 䎢デ ָٔأزך邌爙ׁ׸׷ أذ٦ؗךٖءؾ׾《䖤 أذ٦ؗꟼ鸬ך䎢デ׾《䖤 䖉׍さ׻ׇⳢ椚 ٖءؾך-JLF朐䡾׾《䖤 㣟侁׃׋㜥さַ׵瑞ر٦ة׾鵤ׅ 剑㣐㔐ךٔزٓ؎Ⳣ椚
  161. 剑穄涸ז嗚稊歗꬗ך㹋鄲 Observable.combineLatest( searchRecipeWithLikeState(“εςʔΩ”) .subscribeOn(schedulers.io()), searchAd(“εςʔΩ”) .subscribeOn(schedulers.io()), Pair::create ) .compose(bindToLifecycle())
 .subscribeOn(schedulers.io())


    .observeOn(AndroidSchedulers.mainThread()) .subscribe(pair -> { addToList(pair.first, pair.second); }, throwable -> { showErrorMessage(t); } ); ٖءؾ׾嗚稊MJLF朐屣׾《䖤 ꟼ鸬䎢デך嗚稊  ! ! ! ♥ ♥ ♥ 醱꧟זⳢ椚ד֮׏ג׮؝٦سך〳铣䚍ָ䬐⥂ׁ׸׷ךָ3Y+BWB׾ⵃ欽ׅ׷눁⸂דׅיկ
  162. ׉ך➭5JQTזו תה׭ה酡駈

  163. ֶׁ׵ְ DPNCJOF-BUFTU 0CTFSWBCMF 0CTFSWBCMF 'VOD 3Y+BWBדך⚛⴨Ⳣ椚 Observable.combineLatest(
 Observable.just(1),
 Observable.just(2),
 (i1,i2)

    -> i1 + i2
 ); ♳ך⢽דכאך0CTFSWBCMFך䖉׍さ׻ׇדָׅծ
 _ /⦐ך䖉׍さ׻ׇָ⳿勻׷ًاحسָ欽䠐ׁ׸גְתׅ
  164. 3Y+BWBדך湫⴨⻉ BU.BQ 'VOD TVQFS5  FYUFOET0CTFSWBCMF 3Y+BWBדך湫⴨Ⳣ椚 searchRecipe(“εςʔΩ”) .flatMap(recipes ->

    recipeClient.fetchLikedRecipeIds(recipes)) .subscribe(recipeIds -> {}) BU.BQכծBU.BQ 0CTFSWBCMFGSPN דٔأز׾ぐ銲稆חⴓⶴׅ׷儗ח׮⢪ְתׅկ
  165. ⚛⴨Ⳣ椚ך䘔欽 א⟃♳ך⚛⴨Ⳣ椚׾遤ְ㜥さ אך0CTFSWBCMF׾DPNCJOF-BUFTUד䖉׍さ׻ׇׅ׷㜥さחכծ
 1BJSד⦼׾さ䧭׃תָׅծא⟃♳ך㜥さכ1BJS׾䭁䓸׃׋5VQMF  5VQM׾荈⵸ד⡲׏גⵃ欽׃גתׅկ public class Tuple3<T1, T2,

    T3> {
 public T1 first; public T2 second; public T3 third;
 public Tuple3(T1 first, T2 second, T3 third) {
 this.first = first;
 this.second = second;
 this.third = third;
 }
 public static <T1, T2, T3> Tuple3<T1, T2, T3> create(T1 t1, T2 t2, T3 t3) {
 return new Tuple3<>(t1, t2, t3);
 }
 } 5VQMF׮♧儗劍֮׶ת׃׋ָծ5VQMFתד֮׸ל㣐䫺ך銲⟝׾弫׋ׇ׉ֲדׅկ
  166. ⚛⴨Ⳣ椚ך䘔欽 ״׶㢳ֻך⚛⴨Ⳣ椚׾遤ְ׋ְ㜥さ ⵸鶢ךהֶ׶DPNCJOF-BUFTU׾⢪ֲה醱侧ךⳢ椚׾⚛⴨ח㹋遤ׁ׸׷ ֿהָ⳿勻תָׅծ"OESPJE橆㞮דכ剑㣐⚛⴨תדחⵖꣲׁ׸גְ תׅկ♴鎸ך״ֲח4ZTUFN1SPQFSUZח״׏ג㢌刿ָ〳腉דׅկ // in your CustomApplication public

    void onCreate(Bundle saveInstanceState){
 super.onCreate(); System.setProperty("rx.ring-buffer.size", "32"); } IUUQTHJUIVCDPN3FBDUJWF93Y+BWBJTTVFTד鑫׃ֻ铡僇ׁ׸גְתׅկ
  167. ׉ך➭5JQTזו ׉ך➭5JQT

  168. 暴婊ז0CTFSWBCMF 4JOHMF !#FUB 暴婊ז欽鷿ך0CTFSWBCMF )UUQؙٔؒأزזו♧䏝׃ַ؎كٝزָ崧׸גֿזְ0CTFSWBCMF ➭鎉铂ד鎉ֲהֿ׹ך1SPNJTF׫׋ְז׮ך Single.create(subscriber -> {
 subscriber.onSuccess("Hello

    world");
 }).subscribe(text -> {
 System.out.println(text);
 }, throwable -> {
 Crashlytics.logException(e);
 }); 劤أٓ؎سד0CTFSWBCMF׾⢪׏׋הֿ׹כⰋג4JOHMFח剅ֹ䳔ִ׷ֿהָ⳿勻תׅկ
  169. 暴婊ז0CTFSWBCMF $PNQMFUBCMF !&YQFSJNFOUBM 暴婊ז欽鷿ך0CTFSWBCMF 1045ؙٔؒأزזוծ暴ח⦼ָ鵤׏גֿזְ㜥さך0CTFSWBCMFך
 䧭⸆PS㣟侁׌ֽ׾濼׶׋ְ㜥さח⢪ֲկ⦼כ♧ⴖ崧׸גֿזְկ Completable.create(subscriber -> { 


    subscriber.onCompleted()
 }).subscribe(throwable -> {
 Crashlytics.logException(e);
 }, () -> {
 
 }); 暴ח䗳銲זְךח3FTQPOTFװOVMM׾床ׅז׵ծ4JOHMFװ$PNQMFUBCMF׾♳䩛ֻ⢪ְ׋ְדׅיկ
  170. ֶ׻׶דׅ ֮׶ָהֲ׀ְׂת׃׋կ
 䥪鋵⠓ד׋ֻׁ׿ֶ鑧׃ת׃׳ֲ