package Ġcom . tan f ra . shop mob . s mob . data . net . utils Ċ Ċ import Ġcom . squareup . mos hi .* Ċ import Ġcom . squareup . mos hi . Types . collection ElementType Ċ import Ġjava . io . IOException Ċ import Ġjava . lang . reflect . Type ĊĊ Ċ // Ġfrom : Ġhttps :// gist . github . com / j ish in dev / 9 fd 8 f 0 1 9 1 2 2 5 dc 8 f 0 d 1 f 7 a 6 f 6 f 0 5 1 1 a 1 # file - array list adapter - kt Ċ // Ċ // Ġalso Ġsee : Ġhttps :// blade coder . medium . com / advanced - json - parsing - tech niques - using - mos hi - and - kotlin - daf 5 6 a 7 b 9 6 3 d Ċ // Ġ( ex pl ains Ġthe Ġmechan ics Ġbehind Ġthe Ġabove Ġcode ) Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ class ĠArrayList Adapter < T >( private Ġval Ġadapter : ĠJson Adapter < T >) Ġ: ĠJson Adapter < ArrayList < T >>() Ġ{ ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠArrayList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarray List Ġ= Ġarray ListOf < T >() ĊĊĠĠĠĠĠĠĠ Ġreader . begin Array () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( reader . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( adapter . fromJson ( reader )) ?. let Ġ{ Ġarray List . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreader . end Array () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġarray List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠArrayList < T > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġwriter . begin Array () ĊĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . toJson ( writer , Ġelement ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . end Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFactory < T Ġ: ĠAny > Ġ: ĠJson Adapter . Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( type : ĠType , Ġannotations : ĠSet < Annotation >, Ġm oshi : ĠM oshi ): ĠJson Adapter < *> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Type Ġ= ĠTypes . getRaw Type ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotations . isNotEmpty ()) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( raw Type Ġ== ĠArrayList :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ListAdapter < T >( type , Ġm oshi ). null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > Ġnew ListAdapter ( type : ĠType , Ġm oshi : ĠM oshi ): ĠJson Adapter < ArrayList < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Type Ġ= Ġcollection ElementType ( type , ĠArrayList :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Adapter Ġ= Ġm oshi . adapter < T >( elementType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList Adapter ( element Adapter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ