მონაცემთა გადაცემა აქტივობასა და სერვისს შორის. კომუნიკაცია საქმიანობასა და სერვისს შორის

აპლიკაცია ყოველთვის არ შედგება ერთი ეკრანისგან. მაგალითად, ჩვენ შევქმენით ძალიან სასარგებლო პროგრამადა მომხმარებელს სურს იცოდეს ვინ არის ავტორი. ის აჭერს ღილაკს „შესახებ“ და ხვდება ახალ ეკრანზე, სადაც არის სასარგებლო ინფორმაცია პროგრამის ვერსიის, ავტორის, საიტის მისამართის, რამდენი კატა ჰყავს ავტორს და ა.შ. წარმოიდგინეთ აქტივობის ეკრანი, როგორც ვებ გვერდი სხვა გვერდის ბმულით. თუ დააკვირდებით ფაილში არსებულ კოდს MainActivity.javaწინა გაკვეთილებიდან ნახავთ, რომ ჩვენი კლასი Მთავარი აქტივობაასევე ეხება აქტივობა(ან მისი მემკვიდრეები) ან, უფრო სწორად, მისგან არის მემკვიდრეობით მიღებული.

საჯარო კლასის MainActivity აფართოებს AppCompatActivity

როგორც თქვენ მიხვდით, ჩვენ უნდა შევქმნათ ახალი კლასი, რომელიც შეიძლება გამოიყურებოდეს Მთავარი აქტივობადა შემდეგ როგორღაც გადაერთეთ მასზე ღილაკზე დაჭერით.

ექსპერიმენტისთვის ავიღებთ პროგრამას პირველი გაკვეთილიდან და გამოვიყენებთ ღილაკს ექსპერიმენტებისთვის (ან შექმნა ახალი პროექტიეკრანზე ერთი ღილაკით). შემდეგი, მოდით შევქმნათ ახალი ფორმაჩვენება გამოსადეგი ინფორმაცია. მაგალითად, მოდით ვაჩვენოთ მომხმარებელს რას აკეთებს კატა, როდესაც ის მიდის მარცხნივ და მარჯვნივ. გეთანხმები, ძალიან მნიშვნელოვანი ინფორმაცია, რომელიც იძლევა სამყაროს ამოხსნის გასაღებს.

ჩვენ შევქმნით ახალ აქტივობას ხელით, თუმცა სტუდიას აქვს მზა შაბლონები. მაგრამ არაფერია რთული და უკეთესი გაგებისთვის სასარგებლოა ყველაფრის ხელით გაკეთება.

მოდით შევქმნათ ახალი XML მარკირების ფაილი activity_about.xmlსაქაღალდეში რეს/განლაგება. დააწკაპუნეთ საქაღალდეზე მარჯვენა ღილაკით განლაგებადა აირჩიე კონტექსტური მენიუ ახალი | განლაგების რესურსის ფაილი. გამოჩნდება დიალოგური ფანჯარა. შეიყვანეთ ფაილის სახელი პირველ ველში აქტივობა_დაახლოებით. მეორეში, თქვენ უნდა შეიყვანოთ root ელემენტი. ნაგულისხმევად არის იქ ConstraintLayout. წაშალე ტექსტი და შეიყვანე გადახვევის ხედი. რამდენიმე სიმბოლოს შეყვანა საკმარისია იმისთვის, რომ სტუდიამ შემოგთავაზოს მზა ვარიანტები, შეგიძლიათ დაუყოვნებლივ დააჭიროთ Enter სიტყვის სრული შეყვანის მოლოდინის გარეშე:

ვიღებთ შესაბამის ბლანკს, რომელშიც ჩავსვით ელემენტი ტექსტის ხედვა.

ინფორმაცია იქნება მოძიებული რესურსებიდან, კერძოდ სიმებიანი რესურსიდან შესახებ_ტექსტი. ახლა ის წითლად არის მონიშნული, რაც მიუთითებს ინფორმაციის არარსებობაზე. შეიძლება დაჭერა Alt+Enterდა შეიყვანეთ ტექსტი დიალოგურ ფანჯარაში. მაგრამ ჩვენი მაგალითისთვის, ეს მეთოდი არ იმუშავებს, რადგან ჩვენი ტექსტი იქნება მრავალხაზოვანი, საკონტროლო სიმბოლოების გამოყენებით. ასე რომ მოდი სხვანაირად მოვიქცეთ. მოდით გავხსნათ ფაილი res/values/strings.xmlდა ხელით შეიყვანეთ შემდეგი ტექსტი:

მწვანე მუხა ზღვის სანაპიროსთან;\n ოქროს ჯაჭვი იმ მუხაზე:\n დღე და ღამე მეცნიერი კატა\n ყველაფერი მიდის ჯაჭვის გარშემო;\n მიდის უფლება- სიმღერა ჩართულია,\n მარცხენა- ზღაპარს ყვება.

ჩვენ გამოვიყენეთ უმარტივესი HTML ტექსტის ფორმატირების ტეგები, როგორიცაა , , . ჩვენი მაგალითისთვის, საკმარისია თამამი სიტყვებით, რომლებიც ეხება კატას და მოძრაობის მიმართულებას. ტექსტის თარგმნა ახალი ხაზიგამოიყენეთ სიმბოლოები \n. მოდით დავამატოთ კიდევ ერთი სიმებიანი რესურსი ახალი ეკრანის სათაურისთვის:

პროგრამის შესახებ

გასაგებია მარკირებით. შემდეგი, თქვენ უნდა შექმნათ კლასი ფანჯრისთვის Activity.java-ს შესახებ. აირჩიეთ მენიუდან ფაილი | ახალი | ჯავის კლასიდა შეავსეთ საჭირო ველები. თავდაპირველად საკმარისია მხოლოდ სახელის მითითება. მერე სხვა სფეროებს შეეხო.

მოდი მივიღოთ მომზადება.

ახლა საკლასო ოთახი თითქმის ცარიელია. მოდით დავამატოთ კოდი ხელით. კლასმა უნდა მიიღოს მემკვიდრეობა აბსტრაქტული კლასისგან აქტივობაან მისი ნათესავები ფრაგმენტული აქტივობა, AppCompatActivityდა ა.შ. დამატება აგრძელებს აქტივობას. აქტივობის კლასს უნდა ჰქონდეს მეთოდი onCreate (). ჩადეთ მაუსის კურსორი კლასში და აირჩიეთ მენიუდან კოდი | უგულებელყოფის მეთოდები(Ctrl+O). დიალოგურ ფანჯარაში ჩვენ ვეძებთ სასურველ კლასს, შეგიძლიათ აკრიფოთ პირველი სიმბოლოები კლავიატურაზე სწრაფი ძებნა. შექმნილ მეთოდში, თქვენ უნდა გამოძახოთ მეთოდი setContentView(), რომელიც ჩატვირთავს მომზადებულ მარკირებას ეკრანზე. ჩვენ გვექნება ასეთი ვარიანტი.

პაკეტი en.alexanderklimov.helloworld; იმპორტი android.app.Activity; იმპორტი android.os.Bundle; /** * შექმნილია ალექსანდრე კლიმოვის მიერ 12/01/2014. */ საჯარო კლასი AboutActivity აფართოებს აქტივობას ( @Override protected void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); ) )

ახლა ყველაზე მთავარი იწყება. ჩვენი ამოცანაა გადავიდეთ ახალ ეკრანზე პირველ ეკრანზე ღილაკზე დაჭერისას. დავუბრუნდეთ კლასს Მთავარი აქტივობა. მოდით დავწეროთ ღილაკზე დაწკაპუნების დამმუშავებელი:

საჯარო void onClick(View view) ( Intent intent = new Intent (MainActivity.this, AboutActivity.class); startActivity(intent); )

აქ გამოვიყენე გაკვეთილზე აღწერილი ღილაკზე დაჭერის მეთოდი.

ახალი ეკრანის დასაწყებად, თქვენ უნდა შექმნათ კლასის მაგალითი განზრახვადა მიუთითეთ მიმდინარე კლასი პირველ პარამეტრში, ხოლო კლასი გადასვლისთვის მეორეში, გვაქვს ეს აქტივობის შესახებ. ამის შემდეგ მეთოდს ეძახიან startActivity (), რომელიც უშვებს ახალ ეკრანს.

თუ ახლა ცდილობთ აპლიკაციის ტესტირებას ემულატორში, მიიღებთ შეცდომის შეტყობინებას. რა დავაშავეთ? ერთი მნიშვნელოვანი ნაბიჯი გამოგვრჩა. თქვენ უნდა დაარეგისტრიროთ ახალი აქტივობამანიფესტში AndroidManifest.xml. იპოვეთ ეს ფაილი თქვენს პროექტში და ორჯერ დააწკაპუნეთ მასზე. გაიხსნება ფაილის რედაქტირების ფანჯარა. დაამატეთ ახალი ტეგი დახურვის ტეგის შემდეგ პირველი აქტივობისთვის. ჩაწერეთ დამოუკიდებლად და აქტიურად გამოიყენეთ მინიშნებები. თქვენ მიიღებთ შემდეგს:

ეს არის ის, სადაც სიმებიანი რესურსი გამოდგება შესახებ_სათაური. გაუშვით აპლიკაცია, დააჭირეთ ღილაკს და მიიღეთ ფანჯარა პროგრამის შესახებ. ამრიგად, ჩვენ ვისწავლეთ როგორ შევქმნათ ახალი ფანჯარა და მოვუწოდოთ მას ღილაკზე დაჭერით. და ჩვენს განკარგულებაში გამოჩნდა მეგა-მოხერხებული პროგრამა - ახლა ყოველთვის იქნება მინიშნება, თუ რას აკეთებს კატა, როდესაც ის მარცხნივ მიდის.

კიდევ ერთხელ ვამახვილებ თქვენს ყურადღებას იმ ფაქტზე, რომ მეორე შექმნილი აქტივობის კლასი უნდა იყოს მემკვიდრეობით მიღებული კლასიდან აქტივობაან მსგავსი ( List Activityდა ა.შ.), გქონდეთ XML მარკირების ფაილი (საჭიროების შემთხვევაში) და ჩაიწეროს manifest-ში.

მეთოდის გამოძახების შემდეგ startActivity ()დაიწყება ახალი აქტივობა (ამ შემთხვევაში აქტივობის შესახებ), ის გახდება ხილული და გადავა დატის ზედა ნაწილში, რომელიც შეიცავს გაშვებულ კომპონენტებს. მეთოდის გამოძახებისას დასრულება ()ახალი აქტივობიდან (ან როდესაც ტექნიკის უკანა ღილაკზე დაჭერით) ის დაიხურება და წაიშლება დასტადან. დეველოპერს ასევე შეუძლია ნავიგაცია წინა (ან სხვა) აქტივობაზე იმავე მეთოდის გამოყენებით startActivity ().

მესამე ეკრანის შექმნა - გზა ზარმაცებისთვის

პროგრამისტები, კატების მსგავსად, ზარმაცი არსებები არიან. ყოველთვის გახსოვდეთ, რომ აქტივობისთვის თქვენ უნდა შექმნათ მარკირება და კლასი, რომელიც მემკვიდრეობით იღებს აქტივობა, და შემდეგ არ დაგავიწყდეთ კლასის რეგისტრაცია მანიფესტში - ოჰ, რა ჯანდაბა.

ამ შემთხვევაში აირჩიეთ მენიუდან ფაილი | ახალი | საქმიანობა | ძირითადი საქმიანობა(ან სხვა ნიმუში). შემდეგი, გამოჩნდება ნაცნობი ფანჯარა ახალი აქტივობის შესაქმნელად. შეავსეთ საჭირო ველები.

დააჭირეთ ღილაკს დასრულებადა აქტივობა მზად იქნება. ამის დასადასტურებლად გახსენით manifest ფაილი და შეამოწმეთ ახალი ჩანაწერი. კლასის ფაილებზე და მარკირებაზე არ ვსაუბრობ, ისინი თქვენს თვალწინ გამოჩნდებიან.

თავად დაამატეთ ახალი ღილაკი ძირითადი აქტივობის ეკრანზე და დაწერეთ კოდი შექმნილ აქტივობაზე გადასასვლელად.

თავდაპირველად, გირჩევთ, ხელით შექმნათ ყველა საჭირო კომპონენტი ახალი აქტივობისთვის, რათა გაიგოთ კლასს, მარკირებასა და მანიფესტს შორის ურთიერთობა. და როცა ხელთ მიიღებთ, შეგიძლიათ გამოიყენოთ აქტივობის შექმნის ოსტატი, რათა დააჩქაროთ საქმეები.

მონაცემთა გადაცემა აქტივობებს შორის

ჩვენ გამოვიყენეთ უმარტივესი მაგალითი სხვა აქტივობის ეკრანის გამოსაძახებლად. ზოგჯერ საჭიროა არა მხოლოდ ახალი ეკრანის გამოძახება, არამედ მასზე მონაცემების გადაცემა. მაგალითად, მომხმარებლის სახელი. ამ შემთხვევაში, თქვენ უნდა გამოიყენოთ სპეციალური ტერიტორია დამატებითი მონაცემები, რომელიც კლასს აქვს განზრახვა.

რეგიონი დამატებითი მონაცემებიარის წყვილების სია გასაღები/მნიშვნელობა, რომელიც გადის განზრახვასთან ერთად. სტრიქონები გამოიყენება გასაღებად, ხოლო მნიშვნელობებისთვის შეგიძლიათ გამოიყენოთ ნებისმიერი პრიმიტიული მონაცემთა ტიპი, პრიმიტივების მასივები, კლასის ობიექტები. შეკვრადა ა.შ.

სხვა აქტივობაზე მონაცემების გადასაცემად გამოიყენეთ მეთოდი putExtra ():

Intent.putExtra ("Key", "Value");

მიმღებმა აქტივობამ უნდა მოითხოვოს შესაბამისი მეთოდი: getIntExtra (), getStringExtra ()და ა.შ.:

Int count = getIntent().getIntExtra("სახელი", 0);

მოდით გადავხედოთ წინა მაგალითს. სამი აქტივობა უკვე გვაქვს. პირველ აქტივობას ექნება ორი ტექსტური ველი და ღილაკი. გარეგნობა შეიძლება იყოს შემდეგი:

მეორე აქტივობაზე მეორე აქტივობაელემენტის დაყენება ტექსტის ხედვა, რომელშიც გამოვაჩენთ პირველი აქტივობიდან მიღებულ ტექსტს. მოდით დავწეროთ შემდეგი კოდი მეთოდისთვის onCreate ()მეორე აქტივობაზე.

@Override დაცული void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); სიმებიანი მომხმარებელი = "ცხოველი"; სიმებიანი საჩუქარი = "დონატის ხვრელი"; TextView infoTextViewdT .id.textViewInfo); infoTextView.setText(მომხმარებელი + " , მოგცეს " + საჩუქარი); )

თუ ახლა გავუშვით პროგრამა და უბრალოდ გამოვიძახებთ მეორე ფანჯარას, როგორც ეს აღწერილია სტატიის პირველ ნაწილში, დავინახავთ ნაგულისხმევ წარწერას. ZhYvotnoe, თქვენ მოგცეს დონატ ხვრელი. დამეთანხმებით, სირცხვილია ასეთი შეტყობინებების მიღება.

ჩვენ ვასწორებთ სიტუაციას. დაამატეთ კოდი პირველ აქტივობას:

საჯარო void onClick(View view) ( EditText userEditText = (EditText) findViewById(R.id.editTextUser); EditText giftEditText = (EditText) findViewById(R.id.editTextGift); Intent intent = newActivity. class); // გადაიტანეთ ტექსტი პირველი ტექსტის ველიდან მომხმარებლის სახელის კლავიშში intent.putExtra("username", userEditText.getText().toString()); // გადაიტანეთ ტექსტი მეორე ტექსტის ველიდან საჩუქრის გასაღებში intent.putExtra("საჩუქარი", giftEditText.getText().toString()); startActivity(intent); )

ჩვენ მოვათავსეთ სპეციალური ობიექტის კონტეინერში განზრახვაორი ღილაკი ტექსტის ველებიდან აღებული მნიშვნელობებით. როდესაც მომხმარებელი შეიტანს მონაცემებს ტექსტურ ველებში, ისინი მოხვდება ამ კონტეინერში და გადაეცემა მეორე აქტივობას.

მეორე აქტივობა მზად უნდა იყოს თბილად მიიღოს შემდეგი შეტყობინებები (მონიშნულია თამამად).

// ნაგულისხმევი მნიშვნელობები String user = "LIFE"; სიმებიანი საჩუქარი = "დონატ ხვრელი"; მომხმარებელი = getIntent().getExtras().getString("მომხმარებლის სახელი"); gift = getIntent().getExtras().getString("საჩუქარი"); TextView infoTextView = (TextView)findViewById(R.id.textViewInfo); infoTextView.setText(მომხმარებელი + " , მოგცეს " + საჩუქარი);

ახლა მესიჯი არც ისე შეურაცხმყოფელი, მაგრამ ზოგიერთისთვის სასიამოვნოც კი გამოიყურება. რთულ მაგალითებში სასურველია დაემატოს ვალიდაცია მონაცემთა დამუშავებისას. არის სიტუაციები, როდესაც მეორე აქტივობას იწყებ ცარიელი მონაცემებით, როგორიცაა null, რამაც შეიძლება დააზიანოს აპლიკაცია.

ჩვენს შემთხვევაში, ჩვენ ვიცით, რომ ველოდებით სტრიქონის მნიშვნელობას, ამიტომ კოდი შეიძლება გადაიწეროს შემდეგნაირად:

intent intent = getIntent(); user = intent.getStringExtra ("მომხმარებლის სახელი");

მომხმარებელი = getIntent().getStringExtra("მომხმარებლის სახელი");

პროგრამას აქვს ნაკლი - გაუგებარია ვისგან ვიღებთ მისალმებებს. ნებისმიერი კეთილგანწყობილი მაიმუნი არ მიიღებს საჩუქარს ანონიმური წყაროსგან. ასე რომ, როგორც საშინაო დავალება, დაამატეთ სხვა ტექსტური ველი, რომ შეიყვანოთ მომხმარებლის სახელი, რომელიც აგზავნის შეტყობინებას.

Google გირჩევთ გამოიყენოთ შემდეგი ფორმატი გასაღებებისთვის: თქვენი პაკეტის სახელი, როგორც პრეფიქსი, რასაც მოჰყვება თავად გასაღები. ამ შემთხვევაში, შეგიძლიათ დარწმუნებული იყოთ, რომ გასაღები უნიკალურია სხვა აპლიკაციებთან ურთიერთობისას. დაახლოებით ასე:

საჯარო საბოლოო სტატიკური String USER = "ru.alexanderklimov.myapp.USER";

ვინ მოაწყო კატა ვასკა - ჩვენ ვიღებთ შედეგს უკან

ყოველთვის არ არის საკმარისი მონაცემების უბრალოდ გადაცემა სხვა აქტივობაზე. ზოგჯერ გჭირდებათ ინფორმაციის დაბრუნება სხვა აქტივობიდან, როდესაც ის დახურულია. თუ ადრე მეთოდს ვიყენებდით startActivity (განზრახვა), მაშინ არის დაკავშირებული მეთოდი startActivityFor Result (განზრახვა, int RequestCode). მეთოდებს შორის განსხვავება მდგომარეობს დამატებით პარამეტრში მოთხოვნის კოდი. ეს ძირითადად მხოლოდ მთელი რიცხვია, რომელიც შეგიძლიათ იფიქროთ საკუთარ თავზე. აუცილებელია იმის გასარკვევად, თუ ვისგან მოვიდა შედეგი. ვთქვათ, თქვენ გაქვთ ხუთი დამატებითი ეკრანი და ანიჭებთ მათ მნიშვნელობებს 1-დან 5-მდე და ამ კოდიდან შეგიძლიათ განსაზღვროთ ვისი შედეგის დამუშავება გჭირდებათ. შეგიძლიათ გამოიყენოთ მნიშვნელობა -1, მაშინ ეს იქნება მეთოდის გამოძახების ტოლფასი startActivity (), ე.ი. შედეგს ვერ მივიღებთ.

თუ თქვენ იყენებთ მეთოდს startActivityFor Result(), მაშინ შედეგის მისაღებად კოდის მეთოდის გადაფარვა გჭირდებათ onActivityResult()და დაამუშავეთ შედეგი. დაბნეული? მოდით შევხედოთ მაგალითს.

ვთქვათ, რომ დეტექტივი ხარ. ცნობილი გახდა, რომ რესტორანში გავლენიანი პირის მაგიდიდან ორი ცალი ძეხვი და სხვა პროდუქტი მოიპარეს. ეჭვი დაეცა სამ ეჭვმიტანილზე - ყვანაზე, გარყვნილ ძაღლსა და კატა ვასკას.

ერთ-ერთმა ვიზიტორმა მოგვაწოდა ფოტოების სერია მისი პონტონური iPhone-დან:


ასევე არის სხვა მოწმის ჩვენება: და ვასკა უსმენს და ჭამს.

ჩვენ ვქმნით ახალ პროექტს შერლოკიორი აქტივობით. პირველ ეკრანზე იქნება ღილაკი მეორე ეკრანზე გადასასვლელად და ტექსტური ეტიკეტი, რომელიც გამოსახავს ქურდის სახელს.