Androidçšã«éçºãããšãã¯ãåžžã«æ³šæããå¿
èŠããããŸãã å·ŠåŽã®ã¹ããã/å³åŽã®ã¹ããã-ãããã°åŸãããã«1æéçµéããŸããã æºã¯äœã§ãæ§ããŸãããSDKã®éåžžã®ãã°ãããç¶æ³äŸåã®çµæã䌎ãéèªæãªã¡ãœããåïŒã¯ãã
Fragment.getFragmentManagerïŒïŒ ãããã¯ç§ã§ãïŒãŸã§ã
åã®èšäºã§ã¯ãéåžžã«ç°¡åã«ã¢ã¯ã»ã¹ã§ãããè¡šé¢ãSDKãã¥ãããã«ã€ããŠèª¬æããŸããã ä»åãæºã¯ããæ·±ããããè³¢ããããå
·äœçã«ãªããŸãã
Retrofit 2ããã³
Gsonã«é¢é£ããããã€ãã®ãã€ã³ãããããŸãã

1. GridLayoutã¯layout_weightã«å¿çããŸãã
ç¶æ³
æã
ãæãæã£ããªããžã§ã¯ããäœæããéåžžã®æ¹æ³ãé©åã§ãªãããšããããŸãã
ãã®ãããªç¶æ³ã¯ãããšãã°ããã©ãŒã ã®
暪衚瀺ã§ãã ãã®å Žåã次ã®ãããªãã®ã欲ããã§ãã
50ãã50ã®åãã¢ã©ã€ã¡ã³ããäœæããæ¹æ³ã¯ïŒ ããã€ãã®
åºæ¬çãªã¢ãããŒãããããŸãã
ãã ãããããã«ã¯ãã¹ãŠæ¬ ç¹ããããŸãã
- LinearLayoutã®è±å¯ãã¯xml'kiã®å·šå€§ãããããã
ãç«ã®æ»ããããããŸãã - RelativeLayoutã¯ãå°æ¥ã®å€æŽãè€éã«ããŸãïŒãã©ãŒã å
ã®è€æ°ã®è¡ã®ã¹ã¯ãããŸãã¯ã»ãã¬ãŒã¿ãŒã®è¿œå ã¯åãã¿ã¹ã¯ã«ãªããŸããView.setVisibilityïŒView.GONE ïŒã«ã€ããŠã¯å®å
šã«é»ã£ãŠããŸãã
- ãŸãã誰ãTableLayoutã䜿çšããŸãã...ãŸãã¯åœŒãã¯ããã䜿çšããŸããããã£ãã«ãããŸããã ç§ã¯ãã®ãããªäººãç¥ããŸãã
ããã«ãæè»ãªèšèšãå®çŸããããã«ã
0dpãšweight = 1ã®æ°å€ã®ããžãã¯ã䜿çšããå¿
èŠãéåžžã«é »ç¹ã«ãããŸãã ããã§ã¯ã
TableLayoutã
RelativeLayoutã圹ç«ã¡ãŸããã
TextView.setEllipsizeïŒïŒã®ãããªãã®ãåããŠäœ¿çšããããšãããšãåé¡ãšçã¿ãå§ãŸããŸãã
ãããŠãããããããªãã¯ç§ãå¥ã®èŠçŽ ãèŠéããŠããããšã«æ°ã¥ããã§ãããã
GridLayoutãå©ãã«ãªãããã«æããŸããã
layout_weightããããã£ããµããŒãããŠããªãããã
ããã§ã圹ã«ç«ããªãã§ãããã ããã§ã¯ã©ãããŸããïŒ
解決ç
ãã°ããã®éãäœãããå¿
èŠã¯ãããŸããã§ãã
-RelativeLayoutã§èŠããããã
LinearLayoutã䜿çšãã
ã ãããã°ã©ã ã§ãã¹ãŠãåããŸãïŒç¹ã«
ç°åžžãªå ŽåïŒã
ãã ããããŒãžã§ã³21ã§ã¯ã
GridLayoutããã£ãš
layout_weightããããã£ã®ãµããŒããéå§ããæãéèŠãªããšã«ã¯ããã®å€æŽã
android.support.v7.widget.GridLayoutãšããŠ
AppCompatã«è¿œå ãããŸããïŒ
ããã«ã€ããŠïŒãããŠäžè¬çã«ã¯éåžžã®
GridLayoutãèªåã®
äœéãåã¿ããã£ããšããäºå®ã«ã€ããŠïŒç¥ããŸã§ã«ã
ã¬ã€ã¢ãŠããå³ã«æ³³ãã çç±ãç解ããããšããŠïŒ
ããã®ãã
ã« ïŒå°ãªããšã1é±éãè²»ãããŸããã ãããããããã¯æãéèŠãªé©æ°ã®1ã€ã§ãããäœããã®çç±ã§ååãªæ³šæãæããã«æ®ããããã®ã§ãã 幞ããªããšã«ãstackoverflowïŒ
1ã2 ïŒã«å¯Ÿããåçã¯ãã§ã«è¿œå ããå§ããŠããŸãã
ãŸããæ°ãã
PercentRelativeLayoutãš
PercentFrameLayoutã®ããŒãžã確èªããããšããå§ãããŸã-ããã¯æ¬åœã«ç匟ã§ãã ãã®ååã¯ããèªäœãè¡šããŠãããéåžžã«ã¬ã¹ãã³ã·ããªãã¶ã€ã³ãäœãããšãã§ããŸãã iOSã¯æè¬ããŸãã ãããŠãã¯ããããã¯
AppCompatã«ãããŸãã
ç¶æ³
PresenterManagerãã·ã³ã°ã«ãã³ïŒ
MVPããã®æšæ¶ïŒãšããŠèšè¿°ããããšæã£ãããšããããŸãã
Presenterãæéå
ã«åé€ããã«ã¯ã
Activity.isFinishingïŒïŒã䜿çšããŠãã¢ã¯ãã£ããã£å
ã®
id Presenterã®ãã©ã°ã¡ã³ããåéãããããšãšãã«åé€ããŸãã åœç¶ããã®ã¡ãœããã¯
NavigationViewã®å Žåã¯ããŸãæ©èœããŸããã§ãã-ãã©ã°ã¡ã³ãã¯
FragmentTransaction.replaceïŒïŒã«ãã£ãŠå€æŽããã
Presenterãèç©ããããã¹ãŠãæµåºããŸããã
ã©ãŒããã°ãŒã°ã«ã§æ€çŽ¢ãããšã
Fragment.isRemovingïŒïŒã¡ãœãããèŠã€ãããŸãããããã¯åãããšã§ããããã©ã°ã¡ã³ãã«å¯ŸããŠè¡ãããŸãã
PresenterManagerã®ã³ãŒããæžãçŽããŠåãã§ããŸãã çµãã...
解決ç
...ç§ããããæ©èœãããããšãããšããç§ã®éããªç掻ãå§ãŸããŸããã æ£çŽãªãšãããç§ã¯ãã®æ¹æ³ãšãããè©ŠããŸãããããã®ã¡ãœããã®åäœã¯
Activity.isFinishingïŒïŒãšã¯æ ¹æ¬çã«ç°ãªããŸãã Googleã¯ééã£ãŠããŸããã åæ§ã®åé¡ãçºçããå Žåã¯ã
Fragment.isRemovingïŒïŒã䜿çšããåã«3åèããŠãã ããã
ç§ã¯æ¬æ°ã§ãã ç»é¢ãå転ããããšãã¯ããã°ã«ç¹ã«æ³šæããŠãã ããã
ã¡ãªã¿ã«ã
Acitivity.isFinishingïŒïŒã§ã¯ããã¹ãŠãããã»ã©ã¹ã ãŒãºã§ã¯ãããŸããïŒã¹ã¿ãã¯å
ã®1ã¢ã¯ãã£ããã£ä»¥äžã§ã¢ããªã±ãŒã·ã§ã³ãæå°åããã¡ã¢ãªäžè¶³ãåŸ
ã¡ãæ»ã£ãŠ
Up Navigationãš* voila *ïŒ..ã䜿çšããŸããããã¯ã
ã¢ã¯ãã£ããã£ãäœæããç°¡åãªã¬ã·ãã§ãã
ã isFinishingïŒïŒ== falseã¯ãäºåºŠãšè¡šç€ºãããªãã¢ã¯ãã£ããã£ã®å Žåã
UPD ïŒ
bejibxãŠãŒã¶ãŒãæ£ããææããŠããããã«ã
Activity.isFinishingïŒïŒã«é¢ããã³ã¡ã³ãã¯å®å
šã«çå®ã§
ã¯ãããŸããã çç±ãç解ããã«ã¯
ãã³ã¡ã³ãã¹ã¬ãããèªã
ããšããå§ãããŸã ã
ç¶æ³
ããŒãžããŒã·ã§ã³ãå®è£
ããéã®äžè¬çãªã¿ã¹ã¯ã¯ãæ°ããããŒã¿ã®ããŒãäžã«
ProgressBarã衚瀺ããããšã§ãã
ListViewãšã¯ç°ãªãã
RecyclerViewã«ã¯ã¯ããã«å€ãã®æ©èœããããŸã
ãListViewã® é çã®çš®ãšæ¯èŒããŠ
ã RecyclerView.Adapter.notifyItemRangeInsertedïŒïŒã®äŸ¡å€ã¯äœ
ã§ãã ã
ãã ãããããžã§ã¯ãã§
ListViewã®ä»£ããã«äœ¿çšããããšãããšãããã«å€ãã®ãã¥ã¢ã³ã¹ã«ééããŸããããããã£
ListView.setDividerïŒïŒã¯ã©ãã«ãããŸããïŒ
ListView.addHeaderViewïŒïŒã®ãããªãã®ã¯ã©ãã§ããïŒ ä»ã«äœã
RecyclerView.Adapter.getItemViewTypeïŒïŒãªã©ããªã©ã
ãã®æ°ããæ
å ±ã®ãã¹ãŠãåŠçããããšã¯é£ãããããŸããããäžå¿«ãªããšãæ®ã£ãŠããŸãã
Divider / Headerãè¿œå ããã«ã¯ãã³ãŒãã®ã¯ã©ãŠããæžãå¿
èŠããããŸãã è€éãª
ã¬ã€ã¢ãŠãã«ã€ããŠã¯äœãšèšã
ãŸããïŒ é³©ã¯ã4ã€ã®ç°ãªãããããŒãšããã¿ãŒãšã³ã³ãããŒã«ãåãã
RecyclerViewãå®è¡ããå¿
èŠããããŸããã æ²ãããŠèœèãããšèšã£ãŠã¿ãŸããããç§ã¯éåžžã«é·ãéæ©ããã
解決ç
å®éãäœãæ¢ãã¹ãããç¥ã£ãŠããã°ããã¹ãŠãããã»ã©æªãã¯ãããŸããã
RecyclerViewã®äž»ãªåé¡ïŒããã³ãã®äž»ãªå©ç¹ïŒã¯ã
RecyclerViewã§äœã§ãã§ããããšã§ãã å®è³ªçã«ã¹ã³ãŒãã¯ãããŸããã ããããåé¡ãç¶ããŸãã
ããããŒãå¿
èŠãªå Žåã¯ãèªåã§å®è¡ããŠãã ããã ãããã幞ããªããšã«ãä»ã®äººããã§ã«ãã£ãŠããããèªåã§ãããã®ã§ãããã䜿ããŸãããã
å
žåçãªåé¡ãšãã®è§£æ±ºçïŒ
- èŠçŽ ã®ã°ã«ãŒãã®èŠåºãïŒããšãã°ãèŸæžãAãã§ã¯ããã®æåã§å§ãŸããã¹ãŠã®åèªã®èŠåºãã«ãªããŸãïŒ-ãããè¡ãæãç°¡åãªæ¹æ³ã¯ã2çªç®ã®äžèŠãªViewHolderã¿ã€ããè¿œå ããã«ãåäžã®item-layoutã䜿çšããããšã§ãã çŸåšã®èŠçŽ ããããæåããå¥ã®æåãžã®é·ç§»ãããŒã¯ãã View.VISIBLEãä»ããŠã¬ã€ã¢ãŠãã«é ãããã¿ã€ãã«ãå«ããããšã確èªãããã§ãã¯ãè¿œå ããŸã ã
- ã·ã³ãã«ãªä»åã - ãã®ã³ãŒããã³ããŒããŠãããžã§ã¯ãã«è²Œãä»ããŸã ã äžèŠãªè©æ¬ºã¯ãããŸããã RecyclerView.addItemDecorationïŒïŒãä»ããŠåäœããŸã
- ããããŒ/ããã¿ãŒ/ãã©ãã°ã¢ã³ããããããªã©ãè¿œå ããŸãã -ãã³ã䜿çšããå Žåã¯ãæ°ããViewHolderããšã«æ°ããã¿ã€ããéå§ããïŒãå§ãããŸããïŒãã WrapperAdapterãå®è¡ããŸã ïŒã¯ããã«åªããŠããŸãïŒã ãããã ãããèŠãŠ ããæ°ã«å
¥ãã®ã©ã€ãã©ãªãéžæããããšããå§ãããŸãã å人çã«ã¯ã FastAdapterãšUltimateRecyclerViewã® 2ã€ãåæã«å¥œãã§ã
- ããŒãžããŒã·ã§ã³ãå¿
èŠã§ããã ããã°ã¬ã¹ ããŒã® ããããŒ/ããã¿ãŒãå°ç¡ãã«ããã®ã¯é¢åã§ã-Twitteréçºè
ã®1人ã«ããããŒãžããŒã·ã§ã³ã©ã€ãã©ãªã§ãã
ç§ã«ãšã£ãŠã¯ãŸã è¬ã®ãŸãŸã§ã
-SimpleDivider / SimpleHeaderAdapterãªã©ãäœæããããšãäžå¯èœã ã£ãçç± SDKã«çŽæ¥ïŒ
圌ã®äœãåé¡ãªã®ã§ããïŒ
ããã¥ã¡ã³ããŒã·ã§ã³ã®äžè¶³ã»ã©åé¡ã§ã¯ãããŸããã ããã¯ãããèšãããšã§ãïŒ
ãã®ã¢ããã¿ãŒããããŒã¿ã»ããå
ã®ç¹å®ã®äœçœ®ã«ããã¢ã€ãã ã®ããŒãšããŠæ©èœã§ããäžæã®longå€ãå
¬éããå Žåãtrueãè¿ããŸãã ãã®ã¢ã€ãã ãããŒã¿ã»ããå
ã§åé
眮ãããå Žåããã®ã¢ã€ãã ã«å¯ŸããŠè¿ãããIDã¯åãã§ããå¿
èŠããããŸãã
ãããŠãããã§äººã
ã¯2ã€ã®ã¿ã€ãã«åããããŸãã ãŸãããã¹ãŠãæ確ã§ãã 第äºïŒããã¯ã©ãããæå³ã§ããïŒ
åé¡ã¯ãããªããèªåãæåã®äººã«çŽ¹ä»ãããšããŠããããªãã¯è³ªåã«æ··ä¹±ãããããããªããšããããšã§ãïŒãªããã®æ¹æ³ãªã®ãïŒ ã¯ããäžæã®
IDãè¿ã
ãŸã ïŒ ç¥ã£ãŠããã ãããããªããããå¿
èŠãªã®ã§ããããïŒ ããããGoogleãéåžžã«éãã¹ã¯ããŒã«ãããšæžããŠããïŒããšããçãã¯ç§ã«ã¯åããªãã§ãããã
ãããŠãããã«ãããŸã
RecyclerView.Adapter.setHasStableIdsïŒïŒããã®å éã¯å®éã«ååŸã§ããŸããã1ã€ã®å Žåã«éããŸã-ã©ãã§ã
RecyclerView.Adapter.notifyDataSetChangedïŒïŒã䜿çšããå Žå
ïŒãããŠããã§ã¯ãå®å®IDãå¿
èŠãªçç±ãèšè¿°ããããã«èšèšãããŠããŸãïŒ ã éçããŒã¿ãããå Žåããã®ã¡ãœããã¯äœãæäŸãããå
éš
IDãã§ãã¯ã®ããã«å°ãé
ããªãããšããããŸãã ãã®ããšã¯ãœãŒã¹ãèªãã åŸã«ããããããŸããã§ããããå°ãåŸã«
ãã®èšäºãèŠã€ããŸããã
ç¶æ³
ã¿ã¹ã¯ã¯ããµãŒããŒãã
htmlããã¹ããååŸããŠç»é¢ã«è¡šç€ºããããšã§ãã ããã¹ãã¯ããµãŒããŒãã
ãïŒlt; htmlïŒgt;ããšããŠæäŸãããŸã
ã ã ããã ãã§ã ãããã¿ã¹ã¯å
šäœã§ãã é£ããã§ããïŒ
htmlãæ°è¡ã§è¡šç€ºã§ãã
WebViewããããŸãã ããã¯äœã§ããã
TextViewã§ãã§ããŸãïŒ 1ã€ãŸãã¯2ã€ã§ãå®äºã§ã...ã¯ãïŒ..ãããïŒ..ãŸããããã§ããããïŒïŒ
解決ç
æ®å¿µãªãããããã§ã¯ãã¹ãŠãããã»ã©ã¹ã ãŒãºã§ã¯ãããŸããã
- ãŸããAndroid SDKã«ã¯HtmlUtils.unescapeïŒïŒã®ãããªã¡ãœããã¯ãããŸããã å¿
èŠãªå ŽåïŒlt; ã<ãã«å€ãããšãæãç°¡åãªæ¹æ³ã¯ïŒãã³ã§æ£èŠè¡šçŸãåŠæ¹ãã以å€ã«ïŒãApacheãStringUtils.unescapeHtml4ïŒïŒã«æ¥ç¶ããããšã§ãã
- 次ã®åé¡ã¯ãã¹ã¯ããŒã«æã®ã¢ãŒãã£ãã¡ã¯ãã§ãã ããªãçªç¶ïŒãããAndroid SDKïŒïŒã WebViewã¯é»ãç¹æ»
ããŸãã äœããã¹ããã¯ãããšããã§èª¬æãããŠããŸã ã å人çã«ã¯ããããã®ã¢ãããŒãã®çµã¿åããã®ã¿ãå©ãã«ãªããŸããã
- ãããŠããã®ãããªåçŽãªã¿ã¹ã¯ã®åé¡ã«ãŸã é©ããŠããªãå Žåã¯ãããã§çµããã§ããhtmlããŒãžãã¬ã³ããªã³ã°ãããåã«ProgressBarã衚瀺ããå¿
èŠããããŸãã ãããŠãããã§ãã¹ãŠãæªãã§ãã ããã¯æ¬åœã«æªãã§ãã stackoverflowã§æ瀺ããããã¹ãŠã®ãœãªã¥ãŒã·ã§ã³ã¯ã1åããã«æ©èœãããããŸã£ããæ©èœããŸããïŒ tyk ã tyk ïŒã ãããŸã§åäœããŠããå¯äžã®ã¡ãœããã¯WebView.setPictureListenerïŒïŒã䜿çšããŠããŸããããçŸåšã§ã¯éæšå¥šãšå®£èšãããŠãããããã«ã€ããŠäœãããå¿
èŠã¯ãããŸãã ã
çµæãšããŠãã¢ããã€ã¹ã§ããã®ã¯ProgressBarãæŸæ£ããããšã ãã§ãã ãŸãã¯ããããæ¬åœã«ãæ¬åœã«ãæ¬åœã«ãã£ãã¡ãªå Žåã¯ã htmlã³ãŒãã«çŽæ¥è¿œå ãã javascriptã䜿çšããŠããŒãžã®æºåç¶æ³ã確èªããŸãã ããããããã¯ãã§ã«ãšãªãŒããã¶ãã¹ãã®ã¯ã©ãã®ããã§ãã
6. Gson ïŒ EnumSetãšããŠã®ããããã¹ã¯
ãã€/ã©ãã§/ãªãïŒ
ïŒç¶æ³ã¯ç¹å®ã®ãã®ã§ãããAndroidã®åé¡ã«ã¯çŽæ¥é©çšãããŸãããã次ã®æºã®åã«çš®ãšããŠè¿œå ããããšã«ããŸããïŒ
APIèŠæ±ã®1ã€ã«å¿çããŠã
intã®åœ¢åŒã®ã¢ã¯ã»ã¹èš±å¯ã®ããããã¹ã¯ãå
¥ããŸãã ãã®ãã¹ã¯ã®èŠçŽ ãåŠçããå¿
èŠããããŸãã
æåã«é ã«æµ®ãã¶ã®ã¯ã
intã®å®æ°ãšãã§ãã¯çšã®ãããæŒç®ã§ãã ãã¡ãããåžžã«æ©èœããŸãã ãããããã£ãšæ¬²ããå Žåã¯ã©ãããŸããïŒ
EnumSetã¯ã©ãã§ããïŒ
ãåé¡ãããŸããã-ã²ããçãããç·ãçããŠãã¢ãã«ã®ã¢ãŒããã¯ãã£ã
POJOãModelãEntityãUiModel ããããŠåè«ã§ã¯ãªãã¬ãã«ã«åå²ããŸãã ããããããããªããæ ãè
ã§ãäœèšãªããšãããããªããªãã ã¯ã©ã¹ïŒ ããã§äœïŒ
解決ç
@SerializedNameã® ããããã®ãããªãååã«æ³šæããŠãå¿
èŠãªåæåãäœæããŸãã
åæåã¢ã¯ã»ã¹public enum Access { @SerializedName("1") CREATE, @SerializedName("2") READ; @SerializedName("4") UPDATE; @SerializedName("8") DELETE; }
jsonãã
EnumSetãžã®éã·ãªã¢ã«
åçšã®
JsonDeserializerãå®çŸ©ã
ãŸã ã
EnumMaskConverter public class EnumMaskConverter<E extends Enum<E>> implements JsonDeserializer<EnumSet<E>> { Class<E> enumClass; public EnumMaskConverter(Class<E> enumClass) { this.enumClass = enumClass; } @Override public EnumSet<E> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { long mask = json.getAsLong(); EnumSet<E> set = EnumSet.noneOf(enumClass); for (E bit : enumClass.getEnumConstants()) { final String value = EnumUtils.GetSerializedNameValue(bit); assert value != null; long key = Integer.valueOf(value); if ((mask & key) != 0) { set.add(bit); } } return set; } }
ãããŠ
Gsonã«è¿œå ã
ãŸã ïŒ
Gsonbuilder GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter((new TypeToken<EnumSet<Access>>() {}).getType(), new EnumMaskConverter<>(Access.class)); Gson gson = gsonBuilder.create();
ãã®çµæïŒ
䜿çšãã class MyModel { @SerializedName("mask") public EnumSet<Access> access; } if (myModel.access.containsAll(EnumSet.of(Access.READ, Access.UPDATE, Access.DELETE))) { }
7. ã¬ãããã£ãã ïŒ @GETãªã¯ãšã¹ãã®åæ
ç¶æ³
ã»ããã¢ããããå§ããŸãããã
Gsonã¯ä»¥åãšåæ§ã«åœ¢æãããŸãã
ã¬ãããã£ããã¯æ¬¡ã®ããã«äœæãããŸãã
æ°ããRetrofit.BuilderïŒïŒ retrofit = new Retrofit.Builder() .baseUrl(ApiConstants.API_ENDPOINT) .client(httpClient) .addConverterFactory(GsonConverterFactory.create(gson)) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build();
ããŒã¿ã¯æ¬¡ã®ããã«ãªããŸãã
åæã·ãŒãºã³ public enum Season { @SerializedName("3") AUTUMN, @SerializedName("1") SPRING; }
Gsonãéåžžã®
@SerializedNameãä»ããŠåæåã解æããæ©èœã®ãããã§ãããããçš®é¡ã®è¿œå ã¬ã€ã€ãŒã¯ã©ã¹ãäœæããå¿
èŠæ§ãåãé€ãããšãå¯èœã«ãªããŸããã ãã¹ãŠã®ããŒã¿ã¯ãèŠæ±ããããã«
Modelã«éãããŸãã ãã¹ãŠé 調ã§ãïŒ
æ¹é ãµãŒãã¹ public interface MonthApi { @GET("index.php?page[api]=selectors") Observable<MonthSelector> getPriorityMonthSelector(); @GET("index.php?page[api]=years") Observable<Month> getFirstMonth(@Query("season") Season season); }
ç³èŸŒã¿ class MonthSelector { @SerializedName("season") public Season season; } MonthSelector selector = monthApi.getPriorityMonthSelector(); Season season = selector.season; Month month = monthApi.getFirstMonth(season);
ãããŠä»ã芪æãªãå°é家ã泚æã¯åé¡ã§ãïŒ äœãããŸããããããªãæ©èœããªãã®ã§ããïŒ
解決ç
ããã§ã¯ããããæ©èœããŠããªããšããæ
å ±ãç¹ã«çç¥ããŸããã å®éããã°ãèŠããšã
monthApi.getFirstMonthïŒseasonïŒãªã¯ãšã¹ãã¯
index.phpãšããŠåŠçãã
ãŸããïŒããŒãž[api] = yearsïŒseason_lookup = AUTUMN ...ããããšãäœãããŠããŸããïŒã-ç§ã¯èšããŸãã ããªãã®çãã¯äœã§ããïŒ ãªããã®ãããªçµæã§ããïŒ ãŸã æšæž¬ããŠããŸãããïŒ ãã®åŸããããããŸãã
ãã®ã¿ã¹ã¯ã«åºãããããšãã1ã€ã®ããšãç解ããããã«ãœãŒã¹ã§æ€çŽ¢ããã®ã«æ°æéããããŸããïŒãããã¯èŠããŠããããšãããããŸãïŒïŒã¯ãã
Gsonã¯
@GET /
@POSTããã³ä»ã®åæ§ã®_ãªã¯ãšã¹ã_ãéä¿¡ãããšãã«äœ¿çšãããŸããïŒ å®éãæåŸã«
index.phpã®ãããªãã®ãèŠãã®ã¯
ãã€ã§ããïŒããŒãž[api] = yearsïŒseason_lookup = {aïŒ123; bïŒ321} ïŒ æå³ããããŸãã
Retrofit 2ã¯
Bodyã®å€ææã«ã®ã¿
Gsonã䜿çšããŸããããªã¯ãšã¹ãèªäœã«ã¯äœ¿çšããŸããã æåŸã«ïŒ ã¡ããã©
season.toStringïŒïŒã䜿çšãããŸã-ãããã£ãŠãçµæã§ãã
ãã ãããªã¯ãšã¹ãã§
Gsonãä»ããå€æã§
enum ã䜿çš
ãããå Žå
ïŒãããŠç§ããã®1人ã§ãïŒ ã
ããã«å¥ã®ã³ã³ããŒã¿ãŒãããããã¹ãŠããã€ãã®ããã«ãªããŸãã
8. åŸä»ã ïŒ èªèšŒããŒã¯ã³è»¢é
ãããŠæåŸã«ãç§ã¯ãã®ããã«æžããŠãã人ã«äžã€ã®ããšãèšãããã§ãïŒ
ã¬ãããã£ãããµãŒãã¹ public interface CoolApi { @GET("index.php?page[api]=need") Observable<Data> just(@Header("auth-token") String authToken);
ãã§ã«
Interceptorã®äœ¿çšãéå§ããŠãã ããïŒ
Retrofitã¯éåžžã«äœ¿ããããã®ã§ãããã¥ã¡ã³ããèªã人ã¯ããªãããšãç解ããŠããŸããã3æé座ã£ãŠ
auth-tokenããã ãã§ãªã
ãããŸããŸãªç¹å®ã®
current_locationãbattery_levelãbusy_statusããã³ãŒããæ¶å»ãããšã
æ²ãã¿ã
è¿œãã€ããŸãïŒè»¢éããçç±ãå°ããªãã§ãã ããïŒãã¹ãŠã®ãªã¯ãšã¹ãã§
battery_levelã§ããã·ã§ãã¯ãåããŠããŸãïŒã ããªãã¯
ããã§ããã«ã€ããŠèªãããšãã§ã
ãŸã ã
çµè«ã®ä»£ããã«
ããŠãä»åã¯äºå®ãããã¯ããã«å€ãã®ããã¹ãããããŸããã ããŸãããããããªããã¥ããããæšãŠãå¿
èŠããããŸããããä»ã®ãã¥ãããã¯æ¬¡ã«åºãããããšã«ããŸããã
åã®ããŒããšã¯éã«ãä»åã¯ãæåã«ã°ãŒã°ã«ã§æ€çŽ¢ãããã®ã§ã¯ãªãããŸãããªããããããã®ãããšèããŸããã åé¡ãSDKãŸãã¯ã©ã€ãã©ãªã«ãã£ãŠäœæãããã®ã§ã¯ãªããããã°ã©ãèªèº«ã«ãã£ãŠäœæãããããšããããŸãããæ®å¿µãªããšã«ããã®å Žåã¯ãã¹ãŠãããã«æªåããŸãã éžæããããŒã«ãéå°è©äŸ¡ããªãã§ãã ããããŸããé倧è©äŸ¡ããªãã§ãã ããã
äžè¬ã«ãAndroidã奜ããªå ŽåããAndroidã䜿çšããå Žåã¯ãåžžã«
ã°ããŒãã«ãã¬ã³ãã«ã€ããŠ
ææ¡ããŠãã ãã ã ããŠããŸãã¯ãã䟿å©ãªãã¥ãŒã¹ãªãœãŒã¹ã«ã€ããŠ
ã¯ãã¡ãã
ã芧ãã ãã ã ããã§ã¯ã
Android SDK ã
人æ°ã®ããã©ã€ãã©ãªãªã©ã«é¢ããå€ãã®æ
å ±ãèŠã€ããããšãã§ããŸãã