Տվյալների փոխանցում գործունեության և ծառայության միջև: Գործունեության և ծառայության միջև հաղորդակցություն

Հավելվածը միշտ չէ, որ բաղկացած է մեկ էկրանից: Օրինակ, մենք ստեղծել ենք շատ օգտակար ծրագիրիսկ օգտատերը ցանկանում է իմանալ, թե ով է հեղինակը: Նա սեղմում է «Ծրագրի մասին» կոճակը և հայտնվում է նոր էկրան, որտեղ օգտակար տեղեկություններ կան ծրագրի տարբերակի, հեղինակի, կայքի հասցեի, հեղինակի քանի կատուի մասին և այլն։ Մտածեք գործունեության էկրանը որպես վեբ էջ՝ մեկ այլ էջի հղումով: Եթե ​​նայեք ֆայլի կոդը MainActivity.javaնախորդ դասերից կտեսնեք, որ մեր դասարանը MainActivityվերաբերում է նաև Գործունեություն(կամ նրա ժառանգներին) կամ, ավելի ճիշտ, նրանից ժառանգություն է ստացել։

Հանրային դասի MainActivity-ն ընդլայնում է AppCompatActivity-ը

Ինչպես կարող եք կռահել, մենք պետք է ստեղծենք նոր դաս, որը կարող է նման լինել MainActivityև այնուհետև ինչ-որ կերպ անցնել դրան, երբ կոճակը սեղմված է:

Փորձի համար մենք կվերցնենք ծրագիրը առաջին դասից և կօգտագործենք փորձերի կոճակը (կամ ստեղծել նոր նախագիծէկրանի մեկ կոճակով): Հաջորդը, եկեք ստեղծենք նոր ձևՑուցադրել օգտակար տեղեկատվություն... Օրինակ, եկեք ցույց տանք օգտվողին, թե ինչ է անում կատուն, երբ նա քայլում է աջ ու ձախ: Համաձայն եմ, սա շատ կարևոր տեղեկություն է, որը հուշում է Տիեզերքի մասին:

Մենք ձեռքով կստեղծենք նոր գործունեություն, թեև ստուդիան ունի պատրաստի կաղապարներ։ Բայց ոչ մի բարդ բան չկա, և ավելի լավ հասկանալու համար օգտակար է ամեն ինչ ձեռքով անել։

Եկեք ստեղծենք նոր XML նշագրման ֆայլ activity_about.xmlթղթապանակում res / դասավորություն... Թղթապանակի վրա սեղմեք աջ դասավորությունըև ընտրել համատեքստային մենյու Նոր | Դասավորության ռեսուրսային ֆայլ... Երկխոսության տուփ կհայտնվի: Առաջին դաշտում մուտքագրեք ֆայլի անունը գործունեության_մասին... Երկրորդում դուք պետք է մուտքագրեք արմատային տարրը: Լռելյայն կա ConstraintLayout... Ջնջել տեքստը և մուտքագրել ScrollView... Մի քանի նիշ մուտքագրելը բավական է, որպեսզի ստուդիան պատրաստի տարբերակներ առաջարկի, կարող եք անմիջապես սեղմել Enter՝ չսպասելով բառի ամբողջական մուտքագրմանը.

Մենք կստանանք համապատասխան դատարկ, որի մեջ կտեղադրենք տարրը։ TextView.

Տեղեկատվությունը կվերցվի ռեսուրսներից, մասնավորապես լարային ռեսուրսից about_text... Այժմ այն ​​կարմիրով է ընդգծված՝ ազդարարելով տեղեկատվության պակասը։ Դուք կարող եք սեղմել Alt + Enterև մուտքագրեք տեքստ երկխոսության վանդակում: Բայց մեր օրինակի համար այս մեթոդը չի աշխատի, քանի որ մեր տեքստը լինելու է բազմատող՝ օգտագործելով կառավարման նիշերը: Այսպիսով, եկեք դա այլ կերպ վարվենք: Եկեք բացենք ֆայլը res / values ​​/ strings.xmlև ձեռքով մուտքագրեք հետևյալ տեքստը.

Կանաչ կաղնին ծովի ափին, \ n Ոսկե շղթա թոմ կաղնու վրա. \ n Օր ու գիշեր գիտնական կատու\ n Ամեն ինչ պտտվում է շղթայով, \ n Գնում ճիշտ- երգը սկսվում է, \ n Ձախ- ասում է մի հեքիաթ:

Մենք օգտագործեցինք ամենապարզ HTML տեքստի ձևաչափման պիտակները, ինչպիսիք են , , ... Մեր օրինակի համար բավական է թավով ընդգծել այն բառերը, որոնք վերաբերում են կատվին և շարժման ուղղությանը։ Տեքստը թարգմանելու համար նոր գիծօգտագործել խորհրդանիշներ \ n... Ավելացնենք ևս մեկ լարային ռեսուրս նոր էկրանի վերնագրի համար.

Ծրագրի մասին

Մենք պարզեցինք նշագրումը: Հաջորդը, դուք պետք է ստեղծեք դաս պատուհանի համար AboutActivity.java... Ընտրեք ընտրացանկից Ֆայլ | Նոր | Java դասև լրացրեք պահանջվող դաշտերը: Սկզբում բավական է նշել միայն անունը։ Հետո զբաղվեք այլ ոլորտներով:

Եկեք մի դատարկ.

Դասարանը հիմա գրեթե դատարկ է։ Եկեք ավելացնենք կոդը ձեռքով: Դասը պետք է ժառանգի վերացական դասից Գործունեությունկամ նրա հարազատները սիրում են FragmentActivity, AppCompatActivityև այլն: Մենք ավելացնում ենք ընդլայնում է Գործունեությունը... Գործունեության դասը պետք է ունենա մեթոդ onCreate ()... Մկնիկի կուրսորը դնում ենք դասի ներսում և ընտրացանկից ընտրում Կոդ | Չեղարկելու մեթոդները(Ctrl + O): Երկխոսության վանդակում մենք փնտրում ենք ցանկալի դասը, որի համար կարող եք մուտքագրել ստեղնաշարի առաջին նիշերը արագ որոնում... Ստեղծված մեթոդում դուք պետք է զանգահարեք մեթոդը setContentView ()որը պատրաստի նշումը կբեռնի էկրանին: Մենք կստանանք այս տարբերակը:

Փաթեթ ru.alexanderklimov.helloworld; ներմուծել android.app.Activity; ներմուծել android.os.Bundle; / ** * Ստեղծվել է Ալեքսանդր Կլիմովի կողմից 01.12.2014թ. * / հանրային դասը AboutActivity-ն ընդլայնում է Activity-ը (@Override protected void onCreate (Bundle savedInstanceState) (super.onCreate (savedInstanceState); setContentView (R.layout.activity_about);))

Հիմա սկսվում է ամենակարեւորը. Մեր խնդիրն է գնալ նոր էկրան, երբ սեղմվում է առաջին էկրանի կոճակը: Վերադարձեք դասի MainActivity... Եկեք գրենք կոճակի սեղմման կարգավորիչ.

Public void onClick (Դիտել դիտում) (Intent intent = նոր մտադրություն (MainActivity.this, AboutActivity.class); startActivity (մտադրություն);)

Այստեղ ես օգտագործեցի դասում նկարագրված կոճակների սեղմումները վարելու մեթոդը:

Նոր էկրան սկսելու համար դուք պետք է ստեղծեք դասի օրինակ Մտադրությունև առաջին պարամետրում նշեք ընթացիկ դասը, իսկ երկրորդ պարամետրում անցման դասը, մենք ունենք սա. Գործունեության մասին... Դրանից հետո մեթոդը կոչվում է startActivity ()որը գործարկում է նոր էկրան:

Եթե ​​այժմ փորձեք փորձարկել հավելվածի աշխատանքը էմուլյատորում, ապա կստանաք սխալի հաղորդագրություն: Ի՞նչ ենք մենք սխալ արել։ Մենք բաց ենք թողել մեկ կարևոր քայլ. Դուք պետք է գրանցեք նորը Գործունեությունմանիֆեստում AndroidManifest.xml... Գտեք այս ֆայլը ձեր նախագծում և կրկնակի սեղմեք դրա վրա: Կբացվի ֆայլի խմբագրման պատուհանը: Ավելացնել նոր պիտակ փակման պիտակից հետո առաջին գործունեության համար. Տպեք ինքներդ և ակտիվորեն օգտագործեք հուշումները: Արդյունքը հետևյալն է.

Այսպիսով, լարային ռեսուրսը հարմար եկավ about_title... Գործարկեք հավելվածը, սեղմեք կոճակը և ստացեք պատուհանը Ծրագրի մասին... Այսպիսով, մենք սովորեցինք, թե ինչպես ստեղծել նոր պատուհան և զանգահարել այն կոճակի սեղմումով: Եվ մենք մեր տրամադրության տակ ունենք մեգա-հարմար ծրագիր. այժմ միշտ ձեռքի տակ կլինի հուշում, թե ինչ է անում կատուն, երբ նա գնում է ձախ:

Եվս մեկ անգամ ձեր ուշադրությունը հրավիրում եմ այն ​​փաստի վրա, որ երկրորդ ստեղծված գործունեության դասը պետք է ժառանգի դասից Գործունեությունկամ նրա նման ( ListActivityև այլն), ունենա XML նշագրման ֆայլ (եթե անհրաժեշտ է) և գրված լինի մանիֆեստում:

Մեթոդը զանգահարելուց հետո startActivity ()կսկսվի նոր գործունեություն (այս դեպքում Գործունեության մասին), այն դառնում է տեսանելի և շարժվում դեպի վազող բաղադրիչները պարունակող կույտի վերին մասը: Մեթոդը կանչելիս ավարտել ()նոր գործունեությունից (կամ երբ կոշտ վերադարձի ստեղնը սեղմված է) այն կփակվի և կհեռացվի կույտից: Մշակողը կարող է նաև անցնել նախորդ (կամ որևէ այլ) գործողություն՝ օգտագործելով նույն մեթոդը: startActivity ().

Ինչպես ստեղծել երրորդ էկրան՝ միջոց ծույլերի համար

Ծրագրավորողները, ինչպես կատուները, ծույլ արարածներ են: Միշտ հիշեք, որ գործունեության համար անհրաժեշտ է ստեղծել նշում և դաս, որը ժառանգում է Գործունեություն, իսկ հետո մի մոռացեք գրանցել դասը մանիֆեստում՝ well nafig։

Այս դեպքում ընտրեք ընտրացանկից Ֆայլ | Նոր | Գործունեություն | Հիմնական գործունեություն(կամ մեկ այլ ձևանմուշ): Հաջորդը, կհայտնվի ծանոթ պատուհանը նոր գործունեություն ստեղծելու համար: Մենք լրացնում ենք պահանջվող դաշտերը։

Սեղմեք կոճակի վրա Ավարտելև գործունեությունը պատրաստ կլինի։ Սա հաստատելու համար բացեք մանիֆեստի ֆայլը և ստուգեք նոր մուտքի առկայությունը: Ես չեմ խոսում դասի և նշագրման ֆայլերի մասին, դրանք իրենք կհայտնվեն ձեր առջև։

Ինքներդ ավելացրեք նոր կոճակ հիմնական գործունեության էկրանին և գրեք կոդը՝ ստեղծված գործունեությանն անցնելու համար։

Սկզբում ես ձեզ խորհուրդ կտայի ձեռքով ստեղծել բոլոր անհրաժեշտ բաղադրիչները նոր գործունեության համար, որպեսզի հասկանաք դասի, նշագրման և մանիֆեստի հարաբերությունները: Եվ երբ ձեռք բերեք այն, կարող եք օգտագործել Activity Creation Wizard-ը՝ ձեր աշխատանքը արագացնելու համար:

Տվյալների փոխանցում գործունեության միջև

Մենք օգտագործեցինք ամենապարզ օրինակը՝ մեկ այլ գործունեության էկրան կանչելու համար: Երբեմն անհրաժեշտ է լինում ոչ միայն նոր էկրան կանչել, այլեւ տվյալներ փոխանցել դրան։ Օրինակ, օգտվողի անունը: Այս դեպքում դուք պետք է օգտագործեք հատուկ տարածք լրացուցիչ տվյալներոր դասարանն ունի Մտադրություն.

Տարածաշրջան լրացուցիչ տվյալներզույգերի ցանկն է բանալին / արժեքըոր փոխանցվում է մտադրության հետ մեկտեղ. Տողերը օգտագործվում են որպես բանալիներ, իսկ արժեքների համար կարող եք օգտագործել ցանկացած պարզունակ տվյալների տիպեր, պրիմիտիվների զանգվածներ, դասի օբյեկտներ Փաթեթև այլն:

Տվյալները մեկ այլ գործունեության փոխանցելու համար օգտագործեք մեթոդը putExtra ():

Intent.putExtra («Բանալին», «Արժեք»);

Ստացող գործունեությունը պետք է կոչի համապատասխան մեթոդ. getIntExtra (), getStringExtra ()և այլն:

Int count = getIntent () GetIntExtra («անուն», 0);

Կրկին կրկնենք նախորդ օրինակը։ Մենք արդեն երեք գործունեություն ունենք. Առաջին գործողությունը կունենա երկու տեքստային դաշտ և կոճակ: Արտաքին տեսքը կարող է լինել հետևյալը.

Երկրորդ գործունեությունը Երկրորդ Գործունեությունտեղադրել տարրը TextView, որում կցուցադրենք առաջին գործողությունից ստացված տեքստը։ Եկեք մեթոդի համար գրենք հետևյալ կոդը onCreate ()երկրորդ գործունեության ժամանակ։

@Override պաշտպանված void onCreate (փաթեթ savedInstanceState) (super.onCreate (savedInstanceState); setContentView (R.layout.activity_second); String օգտվող = «Live»; String նվեր = «donut hole»; TextView infoTextView) find.BView id.textViewInfo); infoTextView.setText (օգտատեր + «, ձեզ տրվել է» + նվեր);)

Եթե ​​մենք հիմա սկսենք ծրագիրը և պարզապես կանչենք երկրորդ պատուհանը, ինչպես նկարագրված է հոդվածի առաջին մասում, մենք կտեսնենք լռելյայն պիտակը Ժիվոտնոե, քեզ բլիթ են տվել... Համաձայնեք, բավականին ամոթ է նման հաղորդագրություններ ստանալը։

Մենք շտկում ենք իրավիճակը. Ավելացրեք կոդը առաջին գործունեության համար.

Public void onClick (View view) (EditText userEditText = (EditText) findViewById (R.id.editTextUser); EditText giftEditText = (EditText) findViewById (R.id.editTextGift); Intent intent = new intentivity (A) / մղեք տեքստը առաջին տեքստային դաշտից օգտվողի անվան բանալին intent.putExtra ("username", userEditText.getText (). toString ()); // մղեք տեքստը երկրորդ տեքստային դաշտից դեպի նվեր ստեղն intent.putExtra ( «նվեր», giftEditText.getText (). toString ()); startActivity (մտադրություն);)

Մենք առարկա ենք տեղադրել հատուկ տարայի մեջ Մտադրություներկու բանալի՝ տեքստային դաշտերից վերցված արժեքներով: Երբ օգտվողը մուտքագրում է տվյալներ տեքստային դաշտերում, նրանք կգնան այս կոնտեյներ և կտեղափոխվեն երկրորդ գործողություն:

Երկրորդ գործողությունը պետք է պատրաստ լինի ստանալ ջերմ հաղորդագրություններ հետևյալ կերպ (թավով).

// Կանխադրված արժեքներ՝ String user = «Live»; Լարային նվեր = «բլիթ փոս»; օգտվող = getIntent () getExtras () getString ("username"); նվեր = getIntent () getExtras () getString («նվեր»); TextView infoTextView = (TextView) findViewById (R.id.textViewInfo); infoTextView.setText (օգտատեր + «, ձեզ տրվել է» + նվեր);

Այժմ հաղորդագրությունը որոշ մարդկանց համար ոչ այնքան վիրավորական, բայց նույնիսկ հաճելի է թվում։ Բարդ օրինակներում տվյալների մշակման ժամանակ ցանկալի է ավելացնել վավերացում։ Կան իրավիճակներ, երբ երկրորդ գործունեությունը սկսում ես դատարկ տվյալների նման դատարկորը կարող է խափանել հավելվածը:

Մեր դեպքում մենք գիտենք, որ սպասում ենք լարային արժեքի, ուստի կոդը կարող է վերագրվել այսպես.

Intent intent = getIntent (); օգտվող = intent.getStringExtra («օգտվողի անուն»);

Օգտվող = getIntent () GetStringExtra («օգտանուն»);

Ծրագիրը մի թերություն ունի՝ պարզ չէ, թե ումից ենք ողջույններ ստանում։ Ցանկացած բարեկիրթ կապիկ չի ընդունի նվեր անանուն աղբյուրից։ Այսպիսով, որպես տնային առաջադրանք, ավելացրեք մեկ այլ տեքստային դաշտ՝ մուտքագրելու հաղորդագրություն ուղարկող օգտատիրոջ անունը:

Google-ը խորհուրդ է տալիս բանալիների համար օգտագործել հետևյալ ձևաչափը՝ ձեր փաթեթի անունը որպես նախածանց, որին հաջորդում է հենց բանալին: Այս դեպքում կարող եք վստահ լինել, որ բանալին եզակի է այլ հավելվածների հետ շփվելիս։ Նման մի բան.

Հանրային վերջնական ստատիկ String USER = "ru.alexanderklimov.myapp.USER";

Ով է շրջանակել կատվին Վասկա - մենք հետ ենք ստանում արդյունքը

Միշտ չէ, որ բավարար է պարզապես տվյալներ փոխանցել մեկ այլ գործունեության: Երբեմն դուք ցանկանում եք հետ ստանալ տեղեկատվություն մեկ այլ գործունեությունից, երբ այն փակեք: Եթե ​​ավելի վաղ մենք օգտագործում էինք մեթոդը startActivity (Մտադրության մտադրություն), ապա կա հարակից մեթոդ startActivityFor Result (Մտադրություն, int RequestCode)... Մեթոդների միջև տարբերությունը լրացուցիչ պարամետրն է RequestCode... Դա հիմնականում ընդամենը մի ամբողջ թիվ է, որը դուք կարող եք ինքներդ կազմել: Դա անհրաժեշտ է, որպեսզի տարբերվի, թե ումից է ստացվել արդյունքը։ Ենթադրենք, դուք ունեք հինգ լրացուցիչ էկրան, և դրանց արժեքներ եք հատկացնում 1-ից 5-ը, և այս կոդից կարող եք որոշել, թե ում արդյունքը պետք է մշակեք: Դուք կարող եք օգտագործել -1 արժեքը, այնուհետև դա կլինի նույնը, ինչ մեթոդը կանչելը startActivity (), այսինքն. ոչ մի արդյունքի չենք հասնի.

Եթե ​​դուք օգտագործում եք մեթոդը startActivityFor Result (), ապա արդյունքը ստանալու համար անհրաժեշտ է կոդի մեթոդը փոխարինել onActivityResult ()և մշակել արդյունքը: Շփոթվե՞լ եք: Օրինակ բերենք.

Ենթադրենք՝ դու հետախույզ ես։ Տեղեկություն կար, որ ռեստորանում գտնվող ազդեցիկ անձի սեղանից երկու կտոր երշիկ և այլ ապրանքներ են գողացել։ Կասկածը ընկավ երեք կասկածյալների վրա՝ ագռավի, շան շան և Վասկա կատուի:

Այցելուներից մեկն իր փոքրիկ iPhone-ից լուսանկարների շարք է տրամադրել.


Կա նաև մեկ այլ վկայի ցուցմունք. Իսկ Վասկան լսում է, բայց ուտում է.

Ստեղծեք նոր նախագիծ Շերլոկերկու գործունեությամբ. Առաջին էկրանին կլինի երկրորդ էկրանին անցնելու կոճակ և տեքստային պիտակ, որում կցուցադրվի գողի անունը: