[Android Dev] รับส่งข้อมูลระหว่าง Activity ด้วย Intent

Blog นี้เป็น Blog ที่เขียนต่อจาก Sample Intent นะครับ
ซึ่งเป็นการเปลี่ยนหน้าไปมา หรือที่เรียกว่า Activity ล่ะครับ

ซึ่งสามารถศึกษาได้ที่นี่นะครับ

Android Dev :: ทำ Apps หลายๆ หน้าด้วย Intent

เมื่อคราวที่แล้ว เป็นแค่โปรแกรมง่ายๆ ครับ คือ คลิกปุ่มที่ Activity A ก็เปลี่ยนไป Activity B
แต่วันนี้เราจะส่งข้อมูลระหว่าง Activity ด้วย

การทำงานของโปรแกรมที่ผมจะเขียนนั้นจะทำงานโดย

    - คลิกปุ่มที่ Activity A จะเปลี่ยนไป Activity B
    - คลิกปุ่มที่ Activity B จะเปลี่ยนกลับมาที่ Activity A โดยส่ง String คำว่า "Hello World !!" ด้วย
    - Activity A รอรับค่าจาก Activity B เมื่อมีการส่งมา ให้นำ String มาแสงบน TextView

ส่วนของ UI จะเหมือนกับ Tutorial ที่แล้วเลยนะครับ
เราจะลงในส่วนของ Coding อย่างเดียว ^___^

เริ่มจากโค้ดที่ Activity B [SecondView.java] 
ก่อนนะครับ [เพราะมันสั้นกว่า :P]


โค้ดในส่วนแรกจะไม่มีอะไรมากนะครับ
ที่เพิ่มมาก็คือ ประกาศ String ที่เราจะส่งกลับไปเท่านั้น (ค่าที่ส่งจะเป็นอะไรก็ได้นะครับ)


จะมาต่างในส่วนนี้ครับ เมื่อคราวที่แล้วผมใช้แค่ finish(); เพื่อที่จะกลับไป Activity A
แต่คราวที่นี้ผมเพิ่ม 2 บรรทัดครับ คือ

     putExtra(name[String],value[anyType]);
     เป็น Method ที่จะส่งอะไรสักอย่างไปให้ Intent เพื่อทำงานต่อ

อย่างที่บอกว่า เราจะ put ค่าอะไรก็ได้ ใช้ method เดียวกันแหละครับ
     setResult(resultCode, intent);
     เป็น Method ที่จะทำการระบุว่า มี Result ส่งกลับไปด้วย Intent ใดๆ พร้อมรหัสยืนยันว่าส่งสำเร็จด้วย
     **รหัสยืนยันในที่นี้ จะเหมือนกับสถานะครับ
         ถ้าสำเร็จจะใช้ RESULT_OK ไม่สำเร็จจะใช้ RESULT_CANCELED [ถูก define ไว้อยู่แล้ว]

ต่อไปในส่วนของ Activity A [SampleIntent.java] นะครับ 


ในส่วนนี้เราจะเพิ่ม TextView ที่จะใช้แสดง Message ที่ได้รับกลับมาจาก Activity B
และ REQUEST_CODE ใช้ในกรณีที่เราส่งหลายๆ ค่ากลับมา เป็นตัวจำแนกสิ่งที่ส่งกลับมา


ส่วนนี้ก็เขียนคล้ายเดิมครับ เพิ่มแค่การอ้างอิง TextView ใน main.xml เท่านั้น


เจอที่ต่างแล้ว จากที่เราใช้ startActivity(); เฉยๆ
คราวนี้เราใช้ startActivityForResult(intent, requestCode); เพื่อรออะไรบางอย่างจาก Activity B ด้วย
ซึ่ง method นี้จะใช้คู่กับ method onActivityResult() เพื่อกระทำการกับค่าที่ได้รับกลับมาครับ
ให้เรา Override method นี้ซะ [วิธีการคือพิมพ์ onAc แล้วรอ AutoComplete จัดการ [Eclipse]]


ใน method นี้ก็ทำการ check requestCode ที่ส่งกลับมาก่อนว่าตัวไหน (เผื่อมีการส่งผ่านหลายค่า)
แล้วจากนั้นก็เช็คว่า resultCode ที่กลับมา โอเคไหม ถ้าตรงกัน
เราก็จะกระทำการกับสิ่งที่ส่งมา


method getExtra(name); เนี่ยจะเป็นการรับค่าที่ได้จาก Intent ที่ส่งมา
ซึ่งลักษณะของชื่อ method จะเป็น

[intent].get[type]Extra([name]);

intent คือ ตัวแปร intent ที่อยู่ใน onActivityResult ในที่นี้ก็คือ data นั่นเอง
type   คือ ชนิดตัวแปรที่ส่งมา เป็นอะไรก็ได้ทั้ง String, Float, Integer
name คือ ชื่อตัวแปรที่เราผ่านมาซึ่งต้องตรงกับ argument แรก ของ putExtra() ใน Activity B

ในที่นี้คือ รับค่าที่เป็น String จาก Intent ด้วย getStringExtra(name) และจัดการ setText ด้วย String ที่ส่งมา

แค่นี้แหละครับ คงไม่ยากเกินไปนะครับ

Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android

"อีสุกอีใส" ประสบการณ์เมื่อต้องมาเป็นตอนอายุ 22