RoboGuice рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдЖрдкрдХреЛ Android рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп Contexts рдФрд░ Dependency Injection рдХрд╛ рдкреВрд░рд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, RoboGuice
Google Guice рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ "рдЗрдВрдЬреЗрдХреНрд╢рди" рд╢рдмреНрдж рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ "рдЗрдВрдЬреЗрдХреНрд╢рди" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдЗрдВрдЬреЗрдХреНрд╢рди рдХреНрдпреЛрдВ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдкрд╛рдардХреЛрдВ рдХреЛ рддреБрд░рдВрдд рдПрдХ рд╕рд╡рд╛рд▓ рд╣реЛрдЧрд╛: тАЬрдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕реАрдбреАрдЖрдИ рдХреЗ рд╕рд╛рде рдпреЗ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рдХреНрдпреЛрдВ рд╣реИрдВ? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╕рдм рдмрд╣реБрдд рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред тАЭ
рдореИрдВ рд╡рд┐рдкрд░реАрдд рдХреЗ рдРрд╕реЗ рдкрд╛рдардХреЛрдВ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдЕрд░реНрдерд╛рддреН рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд╕реАрдбреАрдЖрдИ рдмрд╣реБрдд рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЬреАрд╡рди рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред

рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░
рдПрдХреНрд╕рдПрдордПрд▓ рдХреЗ рдЙрддреНрд╕рд╛рд╣ рдФрд░ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдпреБрдЧ рдХреЗ рдмрд╛рдж, sobering рддрдм рдЖрдпрд╛ рдЬрдм рд╣рд░ рдХреЛрдИ XML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ "рдлреБрдЯрдмреИрдЧ" рд╕реЗ рдердХ рдЧрдпрд╛ рдерд╛ред рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рд╢реБрд░реВ рд╣реБрдИ, рдЬреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЧрддрд┐ рджреЗрдЧрд╛ред рдРрд╕рд╛ рд╣реА рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдПрдиреЛрдЯреЗрд╢рди рдЖрдзрд╛рд░рд┐рдд рд╕реАрдбреАрдЖрдИ рдерд╛ред рджреВрд╕рд░реЗ рдХреЛ
рдХрдиреНрд╡реЗрдВрд╢рди рджреГрд╖реНрдЯрд┐рдХреЛрдг
рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдпрд╛
рдХреЛрдбрд┐рдВрдЧ рдкрд░ рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд┐рдпрд╛, рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реБрдЖ, рдХрдИ рд╕реАрдбреАрдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдХрдИ рдмрдбрд╝реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдиреЗ рд╕реАрдбреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, JSI рдХреЛ
JSR-330 , рд╕рд╛рде рд╣реА рд╕рд╛рде (
JSR-299 ) рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ Java EE 6 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдирд┐рдЬреА рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реАрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕реАрдбреАрдЖрдИ рджреЗрдЦрд╛ред рдФрд░ рд╡рд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╕рд╛рджрдЧреА рдФрд░ рд▓рд╛рд▓рд┐рддреНрдп рд╕реЗ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛ред рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдХреА рдмрдЪрдд, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛, рдХреБрд▓ рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдВред
рд╕рдордп рдХреЗ рд╕рд╛рде, рдПрдиреЛрдЯреЗрд╢рди рд▓рдЧрднрдЧ рд╣рд░ рдЬрдЧрд╣ рдШреБрд╕ рдЧрдПред XML рдЙрдиреНрдорд╛рдж рдХреЗ рдмрд╛рдж, рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдпреБрдЧ рдЖ рдЧрдпрд╛ рд╣реИред рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╡реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗред
рддреЛ рдпрд╣ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдХреНрдпреЛрдВ рд╣реИ?
рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рд╡рд┐рдХрд╛рд╕ рдХреЛ рддреЗрдЬ рдФрд░ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдХреЛрдб рдХреНрд▓реАрдирд░ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИред
рдирд┐рд░рд╛рдзрд╛рд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓рд┐рдП
рд░реЛрдмреЛрдЧреБрдЗрдЬрд╝ рдЧреЗрдЯ рд╕реНрдЯрд╛рд░реНрдЯреЗрдб рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВред
рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЧрддрд┐рд╡рд┐рдзрд┐ рд╡рд░реНрдЧ рджрд┐рдЦрддрд╛ рд╣реИ:
class AndroidWay extends Activity { TextView name; ImageView thumbnail; LocationManager loc; Drawable icon; String myName; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); name = (TextView) findViewById(R.id.name); thumbnail = (ImageView) findViewById(R.id.thumbnail); loc = (LocationManager) getSystemService(Activity.LOCATION_SERVICE); icon = getResources().getDrawable(R.drawable.icon); myName = getString(R.string.app_name); name.setText( "Hello, " + myName ); } }
рдпрд╣рд╛рдБ 19 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред
onCreate()
рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЛрдб рдХреА 5 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдХрд╛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд░рдВрдн рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐, рд╢рдмреНрджрд╛рд░реНрде рднрд╛рд░ рд╡рд╣рди рдХрд░рддреА рд╣реИ: name.setText ()ред рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдЕрдзрд┐рдХ рдХреЛрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм RoboGuice рдХреНрдпрд╛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
class RoboWay extends RoboActivity { @InjectView(R.id.name) TextView name; @InjectView(R.id.thumbnail) ImageView thumbnail; @InjectResource(R.drawable.icon) Drawable icon; @InjectResource(R.string.app_name) String myName; @Inject LocationManager loc; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); name.setText( "Hello, " + myName ); } }
рдЕрдм
onCreate()
рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдЖрд╕рд╛рди рд╣реИ; рдиреНрдпреВрдирддрдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛрдб, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдХреЛрдбред
рдкрд╣рд▓рд╛ рдЗрдВрдЬреЗрдХреНрд╢рди
"рдкрд╣рд▓рд╛ рдЗрдВрдЬреЗрдХреНрд╢рди" рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ
developer.android.com рд╕реЗ рдЗрдВрдЬреЗрдХреНрд╢рди рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдЪрд┐рдд рдЙрджрд╛рд╣рд░рдг рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реВрдБрдЧрд╛:
рдиреЛрдЯрдкреИрдб рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ ред рдпрд╣ рдЕрд▓рдорд╛рд░рд┐рдпреЛрдВ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рдпрд╣ рд╕реАрдбреАрдЖрдИ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред
рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░реЛрдмреЛрдЧреНрдпреВрдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреНрд▓рд╛рд╕рдкреИрде рдореЗрдВ рджреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:
рд░реЛрдмреЛрдЧреНрдпреВрдЗрд╕ рдФрд░
рдЧрд╛рд░реНрдб-2.0-no_aop.jar (рд▓реЗрдХрд┐рди
рдЧрд╛рд░реНрдб-3.0 рдирд╣реАрдВ)ред
рдЗрд╕реЗ рдорд╛рд╡реЗрди рдореЗрдВ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рдБ, рдПрдВрдбреЛрд░реНрдб рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдорд╛рд╡реЗрди рдХрд╛рдлреА рд╕рдВрдЧрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИ):
<dependency> <groupId>org.roboguice</groupId> <artifactId>roboguice</artifactId> <version>1.1</version> </dependency>
рдлрд┐рд░ рдЖрдкрдХреЛ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬреЛ
RoboApplication
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ
RoboApplication
:
public class NotepadApplication extends RoboApplication { }
рдФрд░ рдЗрд╕реЗ
AndroidManifest.xml
рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ:
<application android:name="com.android.demo.notepad3.NotepadApplication">
рдЕрдм рдереЛрдбрд╝рд╛
NoteEdit
рдХреНрд▓рд╛рд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ
NoteEdit
ред
NotesDbAdapter
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╕рдВрд╕рд╛рдзрди рдЗрдВрдЬреЗрдХреНрд╢рди рдФрд░
NotesDbAdapter
рдЬреЛрдбрд╝реЗрдВред
рдпрд╣ рдерд╛:
public class NoteEdit extends RoboActivity { private NotesDbAdapter mDbHelper; private EditText mTitleText; private EditText mBodyText; private Long mRowId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.note_edit); setTitle(R.string.edit_note); mDbHelper = new NotesDbAdapter(this); mDbHelper.open(); mTitleText = (EditText) findViewById(R.id.title); mBodyText = (EditText) findViewById(R.id.body); Button confirmButton = (Button) findViewById(R.id.confirm); ... } ... }
рдпрд╣ рдмрди рдЧрдпрд╛:
public class NoteEdit extends RoboActivity { @Inject NotesDbAdapter mDbHelper; @InjectView(R.id.title) EditText mTitleText; @InjectView(R.id.title) EditText mBodyText; @InjectView(R.id.confirm) Button confirmButton; @InjectResource(R.string.edit_note) String title; private Long mRowId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.note_edit); setTitle(title); mDbHelper.open(); ... } ... }
рд╣рдо
Notepadv3
рднреА
Notepadv3
рд╕рдВрд╢реЛрдзрд┐рдд
Notepadv3
ред
RoboListActivity
рд╕реЗ
RoboListActivity
рдореЗрдВ
RoboListActivity
,
RoboListActivity
рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЬреЗрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ рдФрд░
NotesDbAdapter
onCreate()
рд╕реЗ рдЗрд╕
NotesDbAdapter
рдХреЗ рдЖрд░рдВрдн рдХреЛ рд╣рдЯрд╛ рджреЗрдВред
public class Notepadv3 extends RoboListActivity { ... @Inject private NotesDbAdapter mDbHelper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.notes_list); mDbHelper.open(); fillData(); registerForContextMenu(getListView()); } ... }
рдФрд░ рд╣рдо
NotesDbAdapter
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ
NotesDbAdapter
Context
RoboGuice рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк
Context
рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рд╣реЛред
@Inject public NotesDbAdapter(Context ctx) { this.mCtx = ctx; }
рднрд╛рдЧреЛ, рдЬрд╛рдВрдЪреЗрдВ - рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдХреЛрдб рдХрдо рд╣реЛ рдЧрдпрд╛, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдиреА рд░рд╣реА, рдкрдардиреАрдпрддрд╛ рдмрдврд╝реАред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ RoboGuice рди рдХреЗрд╡рд▓
Context
рд╡рд░реНрдЧ рдХрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХрдИ рдЕрдиреНрдп рдПрдВрдбреНрд░реЙрдЗрдб рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рднреА рд╕рдорд╛рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
Application
,
Activity
рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдПрдВред рдкреВрд░реА рд╕реВрдЪреА
рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз
рд╣реИ ред
рдЦреБрд░рд╛рдХ рдмрдврд╝рд╛рдПрдБ
RoboGuice рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
NotesDbAdapter
рдХреНрд▓рд╛рд╕ рдХреЛ
NotesDbAdapter
рдХрд░реЗрдВрдЧреЗред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ
NotesDbAdapter
рд╣реИ рдФрд░ рдЦреБрдж
NotesDbAdapter
рдФрд░
NotesDbAdapter
рдЕрдкрдШрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдврд╝рддрд╛ рд╣реИ,
DatabaseHelper
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдИ рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
TasksDbAdapter
рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ
mDbHelper.open();
рд▓рд┐рдП рдордЬрдмреВрд░ рдХреЙрд▓ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ
mDbHelper.open();
ред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдорд╣рд╛рди рдкреНрд░рд▓реЛрднрди рдЗрд╕ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓ рдЬрд╛рдУ рдФрд░ рдПрдХ рдЧрд▓рддреА рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдЪрд▓рд┐рдП
NotesDbAdapter
рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ:
Context mCtx
, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ DatabaseHelper
рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИDatabaseHelper mDbHelper
рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ DatabaseHelper mDbHelper
, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ SQLiteDatabase mDb
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ- рд╕реНрдереИрддрд┐рдХ рдХреНрд╖реЗрддреНрд░:
DATABASE_CREATE, DATABASE_VERSION, DATABASE_NAME
, рдЬрд┐рдирдХрд╛ DATABASE_CREATE, DATABASE_VERSION, DATABASE_NAME
рд╕реЗ / рд╕реЗ рдиреЛрдЯреНрд╕ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реНрдХ рд╕реЗ рдмрд╣реБрдд рдХрдо рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓
SQLiteDatabase mDb
рдЫреЛрдбрд╝рдирд╛
SQLiteDatabase mDb
ред рдмрд╛рдХреА рдХреЛ рд╣рдЯрд╛ рджреЗрдВред
NotesDbAdapter
рд╕рд┐рдВрдЧрд▓рдЯрди
NotesDbAdapter
ред
рдХреБрд▓ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рдХреНрд╖реНрдп рд╣реИ:
@Singleton public class NotesDbAdapter { public static final String KEY_TITLE = "title"; public static final String KEY_BODY = "body"; public static final String KEY_ROWID = "_id"; private static final String TAG = "NotesDbAdapter"; private static final String DATABASE_TABLE = "notes"; @Inject private SQLiteDatabase mDb; public NotesDbAdapter() { } ... }
KEY_TITLE, KEY_BODY, KEY_ROWID, DATABASE_TABLE, TAG
рд╢реЗрд╖ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ
NotesDbAdapter
рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВред
рдирдИ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреЛрдИ
open()
рдкрджреНрдзрддрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕рд╣реЗрд▓реНрдкрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
рдЕрдм рд╣рдореЗрдВ
SQLiteDatabase mDb
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
SQLiteDatabase mDb
ред рдЬрд╛рд╣рд┐рд░ рд╣реИ,
DatabaseHelper
рдХреЛ рдпрд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
com.google.inject.Provider
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐
get()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрджрд░реНрдн рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк,
DatabaseHelper
рдХреНрд▓рд╛рд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
@Singleton public class DatabaseHelper extends SQLiteOpenHelper implements Provider<SQLiteDatabase>{ private static final String TAG = "DatabaseHelper"; private static final String DATABASE_CREATE = "create table notes (_id integer primary key autoincrement, " + "title text not null, body text not null);"; private static final String DATABASE_NAME = "data"; private static final int DATABASE_VERSION = 2; private SQLiteDatabase mDb; @Inject public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } public SQLiteDatabase get() { if (mDb == null || !mDb.isOpen()) { mDb = getWritableDatabase(); } return mDb; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { ... } }
рдЕрдм RoboGuice рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ SQLiteDatasia рд╡рд░реНрдЧ рдкреНрд░рджрд╛рддрд╛ рд╡рд░реНрдЧ
DatabaseHelper
рд╣реЗрд▓реНрдкрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ, рддрдерд╛рдХрдерд┐рдд рдореЙрдбреНрдпреВрд▓, рдФрд░ рдЗрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ (
NotepadApplication
)
public class NotepadModule extends AbstractAndroidModule { @Override protected void configure() { bind(SQLiteDatabase.class).toProvider(DatabaseHelper.class); } }
public class NotepadApplication extends RoboApplication { @Override protected void addApplicationModules(List<Module> modules) { modules.add(new NotepadModule()); } }
рднрд╛рдЧреЛ, рдХреЛрд╢рд┐рд╢ рдХрд░реЛ - рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
NotepadModule.configure()
рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
NotepadModule.configure()
рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рд╡рд░рдг рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
protected void configure() { bind(SQLiteDatabase.class).toProvider(DatabaseHelper.class); bind(FilterDao.class).to(FilterDaoHttp.class); bind(ItemDao.class).annotatedWith(Http.class).to(ItemDaoHttp.class); }
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ,
Google Guice рдХреЗ рд╕рднреА
рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред
рдпрд╣ рдХреБрдЫ рд╢рдмреНрджреЛрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред RoboGuice рдореЗрдВ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХреА рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдЧрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд░реНрдЧ рд╣реИрдВред
RoboUnitTestCase
рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИрдВред
RoboActivityUnitTestCase
рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рддрд╣рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рддрд╣рдд рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЙрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рд╣реИрдмрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХрд╛рд░рдгред
рдЕрдВрддрд┐рдо рдирд┐рджрд╛рди
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдВрддрд┐рдо рдирд┐рджрд╛рди рдХрд░реЗрдВрдЧреЗ:
+ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдФрд░ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдирд╛
+ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛрдб
+ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдпреЛрдЬрдХрддрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛
+ рдирд┐рд░реНрднрд░рддрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рд╕реНрдерд╛рди
+ рд╕рд┐рд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рд░рд┐рд╕реЛрд░реНрд╕реЗрдЬ рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдореЗрдВ рдЖрд╕рд╛рдиреА (рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ, рдЕрдкреНрд▓рд╛рдпрд╕реЗрд╢рди, рд╢реЗрдпрд░реНрдбрдкреНрд░реАрдлреЗрд░реЗрдВрд╕, рд░рд┐рд╕реЛрд░реНрд╕реЗрдЬ, рдЖрджрд┐)
+ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдирд╛
- рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдорд╛рдЗрдирд╕ред
guice-2.0-no_aop.jar
рдФрд░
roboguice-1.1.1.jar
рдХрд╛ рдЖрдХрд╛рд░ рд▓рдЧрднрдЧ 545 Kb рд╣реИ, рдЬреЛ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╣реИ, рд▓реЗрдХрд┐рди рдмрдбрд╝реЗ рдФрд░ рдЬрдЯрд┐рд▓ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
- рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдХрдореА
рд╕рд╛рде рд╣реА рдПрдХ рдореВрдЯ рдкреНрд╡рд╛рдЗрдВрдЯред рдирд┐рд╕реНрд╕рдВрджреЗрд╣, рдЗрдВрдЬреЗрдХреНрд╢рди рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдкрд░ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдордп рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрд╕ рд╕рдордп рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрд╡реЗрджрди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд▓реВрдк рдФрд░ рдПрдирд┐рдореЗрд╢рди рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдФрд░ DalvikVM рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд▓рдЧрд╛рддрд╛рд░ рдмрдврд╝ рд░рд╣рд╛ рд╣реИред
рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдирд┐рджрд╛рди: рд░реЛрдмреЛрдЧреНрдпреВрдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдирдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреЗрд╢реЗрд╡рд░реЛрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдкрдХреНрд╖ рдкрд▓реНрд▓рд╛ рдЭреБрдХрдирд╛ред