Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЧрд╛рдЗрдб

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП JetPack рдХреЗ "рдЧрд╛рдЗрдб рдЯреВ рдРрдк рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░" рдХрд╛ рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ ред рдореИрдВ рдЖрдкрдХреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдкрд░ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ, рдФрд░ рд╡реЗ рддрдп рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рд╕рд╛рде рд╣реА, рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреА рд╣реИ рдФрд░ рдордЬрдмреВрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреА рд╣реИред рдпрд╣ рдкреГрд╖реНрда рдПрдВрдбреНрд░реЙрдЗрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓ рдкрд░рд┐рдЪрдп рдорд╛рдирддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдВрдбреНрд░реЙрдЗрдб рдРрдк рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдирдП рд╣реИрдВ, рддреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдбреЗрд╡рд▓рдкрд░ рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВ рдФрд░ рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ рдмрддрд╛рдИ рдЧрдИ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВред рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдЯрд▓рд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ рдЗрд╕ рдЧрд╛рдЗрдб рдХреА рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрдбрдиреЗрд╕ рдХреЛрд░реНрд╕, "рдХреЛрдЯрд▓рд┐рди рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛" рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ ред

рдореЛрдмрд╛рдЗрд▓ рдРрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡


рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдбреЗрд╕реНрдХрдЯреЙрдк рдпрд╛ рд▓реЙрдиреНрдЪрд░ рд╕реЗ рдПрдХрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХрд▓ рдЕрдЦрдВрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА , рдлреНрд░реИрдЧрдореЗрдВрдЯ , рд╕рд░реНрд╡рд┐рд╕реЗрдЬ , рдХрдВрдЯреЗрдВрдЯрдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдФрд░ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд╡рд░реНрд╕ рд╕рд╣рд┐рдд рдХрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред

рдЖрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рдХрдЯ рдореЗрдВ рдЗрди рдпрд╛ рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдШрдЯрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ ред Android рддрдм рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрдИ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдХреНрд╕рд░ рдХрдо рд╕рдордп рдореЗрдВ рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдлреЛрдЯреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:

  1. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрдорд░рд╛ рдХреЗ рдЗрд░рд╛рджреЗ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред Android рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреИрдорд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕рдХрд╛ рдЕрдиреБрднрд╡ рддреНрд░реБрдЯрд┐рд╣реАрди рд╣реИред
  2. рдПрдХ рдХреИрдорд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреНрдп рдЗрд░рд╛рджреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдлрд╛рдЗрд▓ рдкрд┐рдХрд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛, рдЬреЛ рдПрдХ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  3. рдЕрдВрдд рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реИ рдФрд░ рдлреЛрдЯреЛ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдлреЛрди рдХреЙрд▓ рдпрд╛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕реЗ рдмрд╛рдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд░реБрдХрд╛рд╡рдЯ рд╕реЗ рдЬреБрдбрд╝реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдлреЛрдЯреЛ-рд╕рд╛рдЭрд╛рдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрди рдмрд┐рдВрджреБрдУрдВ (рдХрд╛рд░реНрдпреЛрдВ) рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рднреА рд╕реАрдорд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рдордп, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреНрд░рдо рдореЗрдВ рдирд╣реАрдВ, рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рд╕рдордп рдирд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпреЗ рдШрдЯрдирд╛рдПрдБ рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдШрдЯрдХреЛрдВ рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рдпрд╛ рд╕реНрдерд┐рддрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдШрдЯрдХ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред

рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд╛рдкрддреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд


рдпрджрд┐ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХрд╛ рд╡рд┐рднрд╛рдЬрди


рдкрд╛рд▓рди тАЛтАЛрдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд┐рджреНрдзрд╛рдВрдд рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдЭрд╛рдХрд░рдг рд╣реИ ред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк рдЕрдкрдиреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдпрд╛ рдлреНрд░реИрдЧрдореЗрдВрдЯ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдпреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд░реНрдЧ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЗрди рд╡рд░реНрдЧреЛрдВ (рдПрд╕рдЖрд░рдкреА) рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд╛рдЭрд╛ рдХрд░рдХреЗ, рдЖрдк рдЖрд╡реЗрджрди рдЬреАрд╡рди рдЪрдХреНрд░ рд╕реЗ рдЬреБрдбрд╝реА рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рдореЙрдбрд▓ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рдпрдВрддреНрд░рдг


рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдореЙрдбрд▓ рд╕реЗ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдзрд┐рдорд╛рдирддрдГ рдПрдХ рд╕реНрдерд╛рдпреА рдореЙрдбрд▓ рд╕реЗред рдореЙрдбрд▓ рдШрдЯрдХ рд╣реИрдВ рдЬреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рд╡реЗ рджреГрд╢реНрдп рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдШрдЯрдХреЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд╡реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬреАрд╡рди рдЪрдХреНрд░ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

рдПрдХ рд╕реНрдерд╛рдпреА рдореЙрдбрд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЖрджрд░реНрд╢ рд╣реИ:

  • рдпрджрд┐ Android OS рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдЦреЛрдПрдВрдЧреЗред
  • рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдЕрд╕реНрдерд┐рд░ рдпрд╛ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред

рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреА рдиреАрдВрд╡ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рдФрд░ рд╕рдорд░реНрдерд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛


рдпрд╣ рдЦрдВрдб рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдПрдВрдб- рдЯреВ- рдПрдВрдб рдпреВрд╕реЗрдЬ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред

рдиреЛрдЯред рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓реЗрдЦрди рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдирд┐рдЬреА API рдФрд░ REST API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреИрдпрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реНрдХреАрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:



рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗрд╡рд▓ рдШрдЯрдХ рдПрдХ рд╕реНрддрд░ рд╕реЗ рдиреАрдЪреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрддрд┐рд╡рд┐рдзрд┐ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдХреЗрд╡рд▓ рджреГрд╢реНрдп рдореЙрдбрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдПрдХрдорд╛рддреНрд░ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдХрдИ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ; рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рднрдВрдбрд╛рд░рдг рдПрдХ рд╕рддрдд рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдФрд░ рдПрдХ рджреВрд░рд╕реНрде рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдПрдХ рд╕реБрд╕рдВрдЧрдд рдФрд░ рд╕реБрдЦрдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдорд┐рдирдЯ рдмрд╛рдж рдпрд╛ рдХреБрдЫ рджрд┐рдиреЛрдВ рдмрд╛рдж рдЖрд╡реЗрджрди рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣ рддреБрд░рдВрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦреЗрдЧрд╛ рдХрд┐ рдЖрд╡реЗрджрди рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдкреБрд░рд╛рдирд╛ рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреЛрд░реЗрдЬ рдореЙрдбреНрдпреВрд▓ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдБ


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ UserProfileFragment рдЯреБрдХрдбрд╝рд╛ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд user_profile_layout.xml рд▓реЗрдЖрдЙрдЯ user_profile_layout.xml ред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рддрддреНрд╡ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП:

  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреАред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЯреБрдХрдбрд╝реЗ рдХреЗ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрдЧрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдУрдПрд╕ рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣реЗрдЬ рд▓реА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рд╣рдо рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗ рддреЛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ: рдПрдХ рдбреЗрдЯрд╛ рд╡рд░реНрдЧ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред

рд╣рдо рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ViewModel рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдПрдХ рдШрдЯрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ UserProfileViewModel рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

ViewModel рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШрдЯрдХ, рдЬреИрд╕реЗ рдЯреБрдХрдбрд╝рд╛ рдпрд╛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ViewModel рдбреЗрдЯрд╛ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред ViewModel рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдШреБрдорд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ред

рдЕрдм рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИ:

  • user_profile.xml : рдкрд░рд┐рднрд╛рд╖рд┐рдд рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рд▓реЗрдЖрдЙрдЯред
  • UserProfileFragment : рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
  • UserProfileViewModel : рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдкреНрд░реЛрдлрд╛рдЗрд▓рдлреНрд░реИрдЧрдореЗрдВрдЯ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд░реНрдЧред

рдирд┐рдореНрди рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рд╛рдордЧреНрд░реА рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред (рд▓реЗрдЖрдЙрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред)

 class UserProfileViewModel : ViewModel() { val userId : String = TODO() val user : User = TODO() } class UserProfileFragment : Fragment() { private val viewModel: UserProfileViewModel by viewModels() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { return inflater.inflate(R.layout.main_fragment, container, false) } } 

рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпреЗ рдХреЛрдб рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ? рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реАрд▓реНрдб UserProfileViewModel рд╡рд░реНрдЧ рдореЗрдВ рд╕реЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред

рдиреЛрдЯред SavedStateHandle ViewModel рдХреЛ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╕реНрдерд┐рддрд┐ рдФрд░ рд╕рдВрдмрджреНрдз рдлрд╝реНрд░реЗрдЧреНрдореЗрдВрдЯ рдпрд╛ рдХреНрд░рд┐рдпрд╛ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

 // UserProfileViewModel class UserProfileViewModel( savedStateHandle: SavedStateHandle ) : ViewModel() { val userId : String = savedStateHandle["uid"] ?: throw IllegalArgumentException("missing user id") val user : User = TODO() } // UserProfileFragment private val viewModel: UserProfileViewModel by viewModels( factoryProducer = { SavedStateVMFactory(this) } ... ) 

рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдлреНрд░реИрдЧрдореЗрдВрдЯ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ LiveData рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдШрдЯрдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

LiveData рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдбреЗрдЯрд╛ рдзрд╛рд░рдХ рд╣реИред рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдиреНрдп рдШрдЯрдХ рдЗрд╕ рдзрд╛рд░рдХ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдХрдард┐рди рдкрде рдмрдирд╛рдП рдмрд┐рдирд╛ред LiveData рдШрдЯрдХ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдШрдЯрдХреЛрдВ рдХреА рдЬреАрд╡рди рдЪрдХреНрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХреНрд░рд┐рдпрд╛рдПрдБ, рдЯреБрдХрдбрд╝реЗ, рдФрд░ рд╕реЗрд╡рд╛рдПрдБ, рдФрд░ рдЗрд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рд╕рд╛рд╡ рдФрд░ рдЕрддреНрдпрдзрд┐рдХ рдореЗрдореЛрд░реА рдЦрдкрдд рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓реАрдирдЕрдк рд▓реЙрдЬрд┐рдХ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред

рдиреЛрдЯред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА RxJava рдпрд╛ Agera рдЬреИрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк LiveData рдХреЗ рдмрдЬрд╛рдп рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдареАрдХ рд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЬрдм рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рд▓рд╛рдЗрдлрд╝рд╕рд╛рдЗрдХрд▓рд░ рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╕рдВрдмрджреНрдз рд▓рд╛рдЗрдлрд╝ рд╕рд╛рдЗрдХрд▓рд░ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рддреЛ рдЗрди рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрдВред рдЖрдк рдЖрд░реНрдЯрд╡рд░реНрдХ android.arch.lifecycle: рдЬреЗрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ RxJava2 рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдЬреЗрдЯ рд╕реНрдЯреНрд░реАрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде LiveData рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ LiveData рдШрдЯрдХ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо UserDrofileViewModel рдореЗрдВ LiveData рдореЗрдВ рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВред UserProfileFragment рдЕрдм рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ UserProfileFragment ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рдпрд╣ LiveData рдлрд╝реАрд▓реНрдб рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд┐рдВрдХ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЙрдиреНрд╣реЗрдВ рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

 class UserProfileViewModel( savedStateHandle: SavedStateHandle ) : ViewModel() { val userId : String = savedStateHandle["uid"] ?: throw IllegalArgumentException("missing user id") val user : LiveData<User> = TODO() } 

рдЕрдм рд╣рдо ViewModel рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП UserProfileFragment рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) viewModel.user.observe(viewLifecycleOwner) { //  UI } } 

рд╣рд░ рдмрд╛рд░ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдСрдирдЪреЗрдВрдЬ () рдХреЙрд▓рдмреИрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рдЖрдк рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдбреЗрдЯрд╛ рдХреЗ рдЕрд╡рд▓реЛрдХрди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреБрдХрдбрд╝реЗ рдХреЗ onStop () рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЪрд░рдг LiveData рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ onChanged() рдХреЙрд▓рдмреИрдХ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдЯреБрдХрдбрд╝рд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╣реИ; рдпрд╣реА рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ onStart () рдХреЛ рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ onStop() ) рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред LiveData рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдЬрдм рдЯреБрдХрдбрд╝реЗ рдкрд░ onDestroy () рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИред

рд╣рдордиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕реНрдХреНрд░реАрди рдХреЛ рдШреБрдорд╛рдпрд╛ рдЬрд╛рдирд╛ред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓рдиреЗ рдкрд░ UserProfileViewModel рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреИрд╕реЗ рд╣реА рдПрдХ рдирдпрд╛ рдЯреБрдХрдбрд╝рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рдорд╛рди ViewModel рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЙрд▓рдмреИрдХ рдХреЛ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреБрд░рдВрдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ ViewModel рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдВрдмрдВрдзрд┐рдд View рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ ViewModel рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ View рд▓рд┐рдП рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрджрд░реНрдн рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред ViewModel рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП ViewModel рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШрдЯрдХреЛрдВ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, ViewModel рдЬреАрд╡рди рдЪрдХреНрд░ рджреЗрдЦреЗрдВред

рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐


рдЕрдм рдЬрдм рд╣рдордиреЗ UserProfileViewModel рдХреЛ UserProfileFragment рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LiveData рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдмреИрдХрдПрдВрдб рдПрдХ REST API рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдЯреНрд░реЛрдлрд┐рдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдПрдХ рд╣реА рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдПрдХ Webservice рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдмреИрдХрдПрдВрдб рд╕реЗ рдЬреБрдбрд╝рддреА рд╣реИ:

 interface Webservice { /** * @GET declares an HTTP GET request * @Path("user") annotation on the userId parameter marks it as a * replacement for the {user} placeholder in the @GET path */ @GET("/users/{user}") fun getUser(@Path("user") userId: String): Call<User> } 

ViewModel рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Webservice рдХреЙрд▓ рдХрд░рдирд╛ рдФрд░ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╣рдорд╛рд░реА LiveData рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдмрдирд╛ рджреЗрддрд╛ рд╣реИред рдпрд╣ UserProfileViewModel рд╡рд░реНрдЧ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╣рд┐рддреЛрдВ рдХреЗ рдкреГрдердХреНрдХрд░рдг рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, ViewModel рдХрд╛ рджрд╛рдпрд░рд╛ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдпрд╛ рдлреНрд░реИрдЧрдореЗрдВрдЯ рд▓рд╛рдЗрдл рд╕рд╛рдЗрдХрд▓ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЬреАрд╡рди рдЪрдХреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ Webservice рдбреЗрдЯрд╛ рдЦреЛ Webservice рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдЕрд╡рд╛рдВрдЫрдиреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдорд╛рд░рд╛ ViewModel рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдирдП рд╕рдВрдЧреНрд░рд╣рдг рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЙрдбреНрдпреВрд▓ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред рд╡реЗ рдПрдХ рд╕рд╛рдл рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрд╛рдХреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпрд╣ рдбреЗрдЯрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдорд┐рд▓ рд╕рдХреЗред рдЙрдиреНрд╣реЗрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдХрд╣рд╛рдБ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдПрдкреАрдЖрдИ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ, рдЬреИрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдореЙрдбрд▓, рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдХреИрд╢ рдХреЗ рдмреАрдЪ рдмрд┐рдЪреМрд▓рд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдорд╛рд░рд╛ UserRepository рд╡рд░реНрдЧ, рдЬреЛ рдирд┐рдореНрди рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WebService рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

 class UserRepository { private val webservice: Webservice = TODO() // ... fun getUser(userId: String): LiveData<User> { //    .    . val data = MutableLiveData<User>() webservice.getUser(userId).enqueue(object : Callback<User> { override fun onResponse(call: Call<User>, response: Response<User>) { data.value = response.body() } //     . override fun onFailure(call: Call<User>, t: Throwable) { TODO() } }) return data } } 

рдпрджреНрдпрдкрд┐ рднрдВрдбрд╛рд░рдг рдореЙрдбреНрдпреВрд▓ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрджреНрджреЗрд╢реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рд╕рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ UserProfileViewModel рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрддрд┐ рдореЙрдбрд▓ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдиреЛрдЯред рд╣рдордиреЗ рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рд╕реНрдерд┐рддрд┐ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рд╢рд┐рд╖реНрдЯ: рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдерд┐рддрд┐ рдкреНрд░рдХрдЯреАрдХрд░рдг рджреЗрдЦреЗрдВред

рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди

рдЙрдкрдпреЛрдХреНрддрд╛ UserRepository рд╡рд░реНрдЧ рдЙрдкрдпреЛрдХреНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Webservice рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд╣рд┐рдПред рд╡рд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ Webservice рд╡рд░реНрдЧ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рднреА рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, UserRepository рд╢рд╛рдпрдж рдПрдХрдорд╛рддреНрд░ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреЛрдб рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рд╡рд░реНрдЧ рдЬрд┐рд╕реЗ Webservice рд▓рд┐рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрд╕реЗ рдФрд░ рдЙрд╕рдХреЗ рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдПрдХ рдирдпрд╛ WebService рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╣реБрдд рд╕рдВрд╕рд╛рдзрди рдЧрд╣рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди (DI) ред рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдмрдирд╛рдП рдмрд┐рдирд╛ рдЙрдирдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд░рди рдЯрд╛рдЗрдо рдореЗрдВ, рдПрдХ рдФрд░ рд╡рд░реНрдЧ рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╣рдо Android рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреИрдЧрд░ 2 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рдбреИрдЧрд░ 2 рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ, рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкреЗрдбрд╝ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди-рд╕рдордп рдХреА рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
  • (рд╕реЗрд╡рд╛ рд╕реНрдерд╛рди) рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░: рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрдЬрд╛рдп рдЙрдирдХреА рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреА рд╣реИрдВред

DI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реЗрд╡рд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк DI рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╕реЗрд╡рд╛ рд╕реНрдерд╛рдиред

рдпреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХреЛрдб рдХреА рдирдХрд▓ рдпрд╛ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдирдореВрдиреЗ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЙрддреНрдкрд╛рджрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рдЬрд▓реНрджреА рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рд╣рдорд╛рд░рд╛ рдирдореВрдирд╛ рдЖрд╡реЗрджрди рд╡реЗрдмрд░ рд╕реЗрд╡рд╛ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреИрдЧрд░ 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдХрдиреЗрдХреНрдЯ ViewModel рдФрд░ рд╕рдВрдЧреНрд░рд╣рдг


рдЕрдм рд╣рдо UserRepository рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ UserProfileViewModel рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 class UserProfileViewModel @Inject constructor( savedStateHandle: SavedStateHandle, userRepository: UserRepository ) : ViewModel() { val userId : String = savedStateHandle["uid"] ?: throw IllegalArgumentException("missing user id") val user : LiveData<User> = userRepository.getUser(userId) } 

рдХреИрд╢рд┐рдВрдЧ


UserRepository рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди Webservice рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЛ рдЕрдореВрд░реНрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рдирд╣реАрдВ рд╣реИред

UserRepository рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдмреИрдХрдПрдВрдб рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдбреЗрдЯрд╛ рдХрд╣реАрдВ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ UserProfileFragment рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрд╕ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рд╡реЗ рдмрджрд▓ рдирд╣реАрдВ рдЧрдП рд╣реЛрдВред

рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ:

  • рдпрд╣ рдмрд╣реБрдореВрд▓реНрдп рдпрд╛рддрд╛рдпрд╛рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИред
  • рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдирдП рдЕрдиреБрд░реЛрдз рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

рдЗрди рдХрдорд┐рдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ UserRepository рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рдореЗрдореЛрд░реА рдореЗрдВ User рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИ:

 // Dagger,        . @Singleton class UserRepository @Inject constructor( private val webservice: Webservice, //    .    . private val userCache: UserCache ) { fun getUser(userId: String): LiveData<User> { val cached = userCache.get(userId) if (cached != null) { return cached } val data = MutableLiveData<User>() userCache.put(userId, data) //     ,  ,  . //      . webservice.getUser(userId).enqueue(object : Callback<User> { override fun onResponse(call: Call<User>, response: Response<User>) { data.value = response.body() } //     . override fun onFailure(call: Call<User>, t: Throwable) { TODO() } }) return data } } 

рд▓рдЧрд╛рддрд╛рд░ рдбреЗрдЯрд╛


рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдШреБрдорд╛рддрд╛ рд╣реИ рдФрд░ рддреБрд░рдВрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд▓реМрдЯрддрд╛ рд╣реИ, рддреЛ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддреБрд░рдВрдд рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреЛрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд╣рдорд╛рд░реЗ рдХреИрд╢ рд╕реЗ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдВрдбреНрд░реЙрдЗрдб рдУрдПрд╕ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдмрд╛рдж рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЫреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ? рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдкрдЧреНрд░реЗрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рдмреБрд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдмреЗрдХрд╛рд░ рднреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрд▓реНрдпрд╡рд╛рди рдореЛрдмрд╛рдЗрд▓ рдбреЗрдЯрд╛ рдХреА рдЦрдкрдд рдХрд░рддрд╛ рд╣реИред

рдЖрдк рд╡реЗрдм рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирдИ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ: рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЙрд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд┐рддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп? рдЖрд╡реЗрджрди рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рдЬреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рднреНрд░рдорд┐рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдкрд░ рдПрдХ рдорд┐рддреНрд░ рд╕реВрдЪреА рдЕрдиреБрд░реЛрдз рдФрд░ рдПрдХрд▓-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдПрдХ рдирд┐рд░рдВрддрд░ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдХрдХреНрд╖ рд╕реНрдерд╛рдпреА рдбреЗрдЯрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (DB) рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред

рдХрдорд░рд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ-рдореИрдкрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдиреНрдпреВрдирддрдо рдорд╛рдирдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рдВрдХрд▓рди рдХреЗ рд╕рдордп, рдпрд╣ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рд╕реНрдХреАрдорд╛ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╡реЗрд░реА рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯреВрдЯреЗ SQL рдХреНрд╡реЗрд░реА рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХрдЪреНрдЪреЗ рдПрд╕рдХреНрдпреВрдПрд▓ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгреЛрдВ рд╕реЗ рдХрдХреНрд╖ рд╕рд╛рд░ред рдпрд╣ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдбреЗрдЯрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдЕрдиреБрд░реЛрдз рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓рд╛рдЗрд╡рдбрд╛рдЯрд╛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдереНрд░реЗрдбрд┐рдВрдЧ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдореЗрдВ рднрдВрдбрд╛рд░рдг рддрдХ рдкрд╣реБрдВрдЪред

рдиреЛрдЯред рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ SQLite рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рд▓реЗрд╢рдирд▓ рдореИрдкрд┐рдВрдЧ (ORM), рддреЛ рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рди рдХреЛ рд░реВрдо рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░реНрдЧрдард┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдХреНрд╡реЗрд░реА рд╕рддреНрдпрд╛рдкрди рдХреЗ рдЕрдореВрд░реНрдд рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХрдХреНрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рд▓реЗрдЖрдЙрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреЗ User рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреНрд▓рд╛рд╕ рдореЗрдВ @PrimaryKey рдПрдиреЛрдЯреЗрд╢рди рдФрд░ рдХреНрд▓рд╛рд╕ id рдлреАрд▓реНрдб рдореЗрдВ @PrimaryKey рдПрдиреЛрдЯреЗрд╢рди @PrimaryKey ред рдпреЗ рдПрдиреЛрдЯреЗрд╢рди рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ User рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ id рдХрд░рддреЗ рд╣реИрдВ:

 @Entity data class User( @PrimaryKey private val id: String, private val name: String, private val lastName: String ) 

рдлрд┐рд░ рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП RoomDatabase рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ:

 @Database(entities = [User::class], version = 1) abstract class UserDatabase : RoomDatabase() 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ UserDatabase рд╕рд╛рд░ рд╣реИред рдХрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред

рдЕрдм рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдбрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ (DAO) рдмрдирд╛рддреЗ рд╣реИрдВред

 @Dao interface UserDao { @Insert(onConflict = REPLACE) fun save(user: User) @Query("SELECT * FROM user WHERE id = :userId") fun load(userId: String): LiveData<User> } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ load рд╡рд┐рдзрд┐ LiveData рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддреА рд╣реИред рдХрдХреНрд╖ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдм рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рднреА рд╕рдХреНрд░рд┐рдп рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдХрдХреНрд╖ LiveData рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдСрдкрд░реЗрд╢рди рдХреБрд╢рд▓ рд╣реИ; рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рдХреНрд░рд┐рдп рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╣реЛред

рдиреЛрдЯ: рдЯреЗрдмрд▓ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдорд╛рдиреНрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд░реЗ рдХреА рдЬрд╛рдБрдЪ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ UserDao рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд░реНрдЧ рд╕реЗ DAO рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВ:

 @Database(entities = [User::class], version = 1) abstract class UserDatabase : RoomDatabase() { abstract fun userDao(): UserDao } 

рдЕрдм рд╣рдо рдХрдХреНрд╖ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА UserRepository рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

 //  Dagger,         . @Singleton class UserRepository @Inject constructor( private val webservice: Webservice, //    .    . private val executor: Executor, private val userDao: UserDao ) { fun getUser(userId: String): LiveData<User> { refreshUser(userId) //   LiveData    . return userDao.load(userId) } private fun refreshUser(userId: String) { //    . executor.execute { // ,      . val userExists = userDao.hasUser(FRESH_TIMEOUT) if (!userExists) { //  . val response = webservice.getUser(userId).execute() //    . //   .  LiveData  , //        . userDao.save(response.body()!!) } } } companion object { val FRESH_TIMEOUT = TimeUnit.DAYS.toMillis(1) } } 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдордиреЗ UserRepository рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рддрдм рднреА рд╣рдореЗрдВ рдЕрдкрдиреЗ UserProfileViewModel рдпрд╛ UserProfileFragment рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЫреЛрдЯрд╛ рд╕рд╛ рдЕрдкрдбреЗрдЯ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдирдХрд▓реА UserRepository рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╣рдорд╛рд░реЗ рдЙрддреНрдкрд╛рджрди UserProfileViewModel рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рд▓реМрдЯрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрд░рд╛рдиреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд▓реЗрддреАред рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдкреБрд░рд╛рдиреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдбрдореА рдореВрд▓реНрдпреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдФрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдЬрд╛рдирдХрд╛рд░реА рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╕рддреНрдп рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реНрд░реЛрддред

рдЖрдорддреМрд░ рдкрд░, рдЕрд▓рдЧ-рдЕрд▓рдЧ REST API рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдмреИрдХрдПрдВрдб рдореЗрдВ рдПрдХ рдФрд░ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╣реИ рдЬреЛ рджреЛрд╕реНрддреЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рд╕реЗ рдЖ рд╕рдХрддрд╛ рд╣реИ, рд╕рдВрднрд╡рддрдГ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдордиреЗ UserRepositoryрдЕрдиреБрд░реЛрдз WebserviceрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд┐рдП рдмрд┐рдирд╛, рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднреНрд░рд╛рдордХ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рднрдВрдбрд╛рд░рдг рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдкреНрд░рд╛рд░реВрдк рдЕрдВрддрд┐рдо рдХрд╣рд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред

рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди UserRepositoryрдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╡реЗрдм рд╕реЗрд╡рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рддрдм рд╕рдХреНрд░рд┐рдп LiveData рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рддреНрдп рдХреЗ рдПрдХрдорд╛рддреНрд░ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ , рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдиреНрдп рд╣рд┐рд╕реНрд╕реЗ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ UserRepositoryред рднрд▓реЗ рд╣реА рдЖрдк рдбрд┐рд╕реНрдХ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реЛрдВ, рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЖрдкрдХреЗ рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рд╕рддреНрдп рдХреЗ рдПрдХрдорд╛рддреНрд░ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдиреЗрдВред

рдСрдкрд░реЗрд╢рди рдХреА рдкреНрд░рдЧрддрд┐ рджрд┐рдЦрд╛рдПрдВ


рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдкреБрд▓-рдЯреВ-рд░рд┐рдлреНрд░реЗрд╢, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдСрдкрд░реЗрд╢рди рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдореЗрдВ рдорд┐рддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдЙрд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ LiveData рдкрд░ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдлреНрд▓рд╛рдЗрдЯ рдореЗрдВ рдПрдХ рдЕрдиреБрд░реЛрдз рд╣реЛрдиреЗ рдХрд╛ рддрдереНрдп рдХреЗрд╡рд▓ рдПрдХ рдФрд░ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рд╣реИ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рдорд╛рди рд╣реИ Userред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╕рд╣рдордд рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рдгрдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдЕрдиреБрд░реЛрдз рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рд╣реЛ:



рд╣рд┐рддреЛрдВ рдХреЗ рдкреГрдердХреНрдХрд░рдг рдкрд░ рдЦрдВрдб рдореЗрдВ, рд╣рдордиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдореБрдЦреНрдп рд▓рд╛рдн рдкрд░реАрдХреНрд╖рдгрдиреАрдпрддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реВрдЪреА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ:

  • рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдЗрдВрдЯрд░реЗрдХреНрд╢рди : рдПрдВрдбреНрд░реЙрдЗрдб рдпреВрдЖрдИ рдЯреЗрд╕реНрдЯ рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ред рдЖрдк рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд▓реЗрдЖрдЙрдЯ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ UserProfileViewModelред рдЪреВрдВрдХрд┐ рдЯреБрдХрдбрд╝рд╛ рдХреЗрд╡рд▓ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ UserProfileViewModel, рдХреЗрд╡рд▓ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдордЬрд╛рдХ (рдирдХрд▓) рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
  • ViewModel: UserProfileViewModel JUnit . , UserRepository .
  • UserRepository: UserRepository JUnit. Webservice UserDao . :

    • -.
    • .
    • , .

  • Webservice , UserDao , .
  • UserDao: DAO . - , . , , , тАж

    : Room , DAO, JSQL SupportSQLiteOpenHelper . , SQLite SQLite .
  • -: . , -, . , MockWebServer , .
  • : maven . androidx.arch.core : JUnit:

    • InstantTaskExecutorRule: .
    • CountingTaskExecutorRule: . Espresso .



рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдХ рд░рдЪрдирд╛рддреНрдордХ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдпрд╣ рдХрдИ рдХреНрд░рд┐рдпрд╛рдУрдВ рдпрд╛ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛, рд╣рдЯрд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдСрдлрд╝рд▓рд╛рдЗрди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛, рдпрд╛ рдЧреИрд░-рддреБрдЪреНрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордирд╛ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд╢рдВрд╕рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдкрдХреЗ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп, рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдмрдирд╛рддрд╛ рд╣реИ:

рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБрдУрдВ рдЬреИрд╕реЗ - рдХреНрд░рд┐рдпрд╛рдУрдВ, рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдкреНрд░рд╕рд╛рд░рдг рд░рд┐рд╕реАрд╡рд░ - рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рд╕рдмрд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдмрд╛рддрдЪреАрдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП, рдХрд╛рдлреА рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╣реИред

рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреА рд╕реНрдкрд╖реНрдЯ рд░реЗрдЦрд╛рдПрдВ рдмрдирд╛рдПрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдЖрдзрд╛рд░ рдореЗрдВ рдХрдИ рд╡рд░реНрдЧреЛрдВ рдпрд╛ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рди рдХрд░реЗрдВред рдЗрд╕реА рддрд░рд╣, рдХрдИ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рди рдХрд░реЗрдВ - рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рдХреИрд╢рд┐рдВрдЧ рдФрд░ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ - рдПрдХ рд╣реА рдХрдХреНрд╖рд╛ рдореЗрдВред

рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░реЗрдВред

рдПрдХ "рд╕рд┐рд░реНрдл рдПрдХ" рд▓реЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреЗ рдкреНрд░рд▓реЛрднрди рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░реЗрдВ рдЬреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдм рдЖрдкрдХрд╛ рдХреЛрдб рдЖрдзрд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЖрдк рдХрдИ рдмрд╛рд░ рддрдХрдиреАрдХреА рдЛрдг рд▓реЗ рд▓реЗрдВрдЧреЗред

рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдкреАрдЖрдИ рд╣реЛрдиреЗ рд╕реЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдк рдЗрди рджреЛ рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЗ рддрд░реНрдХ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВ рдпрд╛ рдкреВрд░реЗ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛрдб рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдмрд╣реБрдд рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрд╕рдВрднрд╡ рднреА рдирд╣реАрдВред

рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдЦрдбрд╝реЗ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрджреНрд╡рд┐рддреАрдп рдХреЛрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

рдмрд╛рд░-рдмрд╛рд░ рдПрдХ рд╣реА рдкреИрдЯрд░реНрди рд▓рд┐рдЦрдХрд░ рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдордЬрдмреВрдд рди рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЕрдкрдиреЗ рд╕рдордп рдФрд░ рдКрд░реНрдЬрд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрджреНрд╡рд┐рддреАрдп рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рджреЛрд╣рд░рд╛рдП рдЧрдП рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реЙрдЗрдб рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдШрдЯрдХреЛрдВ рдФрд░ рдЕрдиреНрдп рдЕрдиреБрд╢рдВрд╕рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рджреЗрдВред

рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдФрд░ рддрд╛рдЬрд╛ рдбреЗрдЯрд╛ рд░рдЦреЗрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЙрдирдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдСрдлрд╝рд▓рд╛рдЗрди рд╣реЛред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рдЧрд╛рддрд╛рд░ рдЙрдЪреНрдЪ рдЧрддрд┐ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдПрдХрд▓ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рдХреЗрд╡рд▓ рд╕рд╣реА рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд░реЗрдВред

рдЬрдм рднреА рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЗрдЯрд╛ рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рдХреЗ рдЗрд╕ рдПрдХрд▓ рд╕реНрд░реЛрдд рд╕реЗ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ: рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛


рдЕрдиреБрд╢рдВрд╕рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдмреВрдЯ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред

рдпрд╣ рдЦрдВрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдП, рдЬреЛ рдбреЗрдЯрд╛ рдФрд░ рдЙрд╕рдХреЗ рд░рд╛рдЬреНрдп рджреЛрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИResource:

 //  ,         . sealed class Resource<T>( val data: T? = null, val message: String? = null ) { class Success<T>(data: T) : Resource<T>(data) class Loading<T>(data: T? = null) : Resource<T>(data) class Error<T>(message: String, data: T? = null) : Resource<T>(data, message) } 

рдЪреВрдВрдХрд┐ рдЗрд╕ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЖрдо рдмрд╛рдд рд╣реИ, рдпрд╣ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрд┐рд╕реЗ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ NetworkBoundResourceред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд░реЗрдЦ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдгрдп рдЯреНрд░реА рджрд┐рдЦрд╛рддрд╛ рд╣реИ NetworkBoundResource:



рдпрд╣ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рджреЗрдЦрдХрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдкрд╣рд▓реА рдмрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХреЛрдИ рд░рд┐рдХреЙрд░реНрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ NetworkBoundResourceрдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдЙрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдПрдХ рд╕рд╛рде рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рд╕рдВрднрд╡рддрдГ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдХреИрд╢реНрдб рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдпрджрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХреЙрд▓ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░рддрд╛ рд╣реИред рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз NetworkBoundResourceрд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рд╕реАрдзреЗ рднреЗрдЬрддрд╛ рд╣реИред

. . , .

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рддрдм рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдо рди рднреЗрдЬреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рддреНрдп рдХреЗ рдПрдХрд▓ рд╕реНрд░реЛрдд рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЯреНрд░рд┐рдЧрд░реНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛ рдорд╛рдиреЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, рдирдП рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ `SUCCESS` рди рднреЗрдЬреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рддрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдбреЗрдЯрд╛ рдХрд╛ рдЧрд▓рдд рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рдирд┐рдореНрди рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ NetworkBoundResourceрдЕрдкрдиреЗ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЦреБрд▓реА рдПрдкреАрдЖрдИ рджрд┐рдЦрд╛рддрд╛ рд╣реИ :

 // ResultType:   . // RequestType:   API. abstract class NetworkBoundResource<ResultType, RequestType> { //      API   . @WorkerThread protected abstract fun saveCallResult(item: RequestType) //      ,  ,    //     . @MainThread protected abstract fun shouldFetch(data: ResultType?): Boolean //        . @MainThread protected abstract fun loadFromDb(): LiveData<ResultType> //     API. @MainThread protected abstract fun createCall(): LiveData<ApiResponse<RequestType>> // ,    .   //    ,    . protected open fun onFetchFailed() {} //   LiveData,  , //    . fun asLiveData(): LiveData<ResultType> = TODO() } 

рдХрдХреНрд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:

  • рдпрд╣ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, ResultTypeрдФрд░ RequestTypeрдЪреВрдВрдХрд┐ рдПрдкреАрдЖрдИ рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдпрд╣ ApiResponseрдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред ApiResponseрдПрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЖрд╡рд░рдг Retrofit2.Callрд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ LiveDataред

рдХрдХреНрд╖рд╛ рдХрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди GitHub Android-Architecture-ComponentsNetworkBoundResource рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ ред рдПрдХ рдмрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣рдорд╛рд░реА рдбрд┐рд╕реНрдХ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЬреБрдбрд╝реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :

NetworkBoundResourceUserUserRepository

 //  Dagger2,         . @Singleton class UserRepository @Inject constructor( private val webservice: Webservice, private val userDao: UserDao ) { fun getUser(userId: String): LiveData<User> { return object : NetworkBoundResource<User, User>() { override fun saveCallResult(item: User) { userDao.save(item) } override fun shouldFetch(data: User?): Boolean { return rateLimiter.canFetch(userId) && (data == null || !isFresh(data)) } override fun loadFromDb(): LiveData<User> { return userDao.load(userId) } override fun createCall(): LiveData<ApiResponse<User>> { return webservice.getUser(userId) } }.asLiveData() } } 

Source: https://habr.com/ru/post/hi456256/


All Articles