ในแบบฝึกหัด Android สำหรับผู้เริ่มต้นก่อนหน้านี้เราได้พูดถึงองค์ประกอบพื้นฐานสามประการแรกของ Android: กิจกรรม , เจตนา และ บริการ . บทความนี้เป็นบทความที่ 4 ในบทแนะนำ Android สำหรับผู้เริ่มต้นชุดนี้และกล่าวถึงผู้ให้บริการเนื้อหาซึ่งเป็นอีกองค์ประกอบที่สำคัญมากของระบบ Android
ผู้ให้บริการเนื้อหาเป็นคนกลางของระบบ Android ซึ่งอำนวยความสะดวกในการแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชัน Android ต่างๆ ให้เราดูรายละเอียดเล็กน้อยในบทช่วยสอน Android นี้
บทแนะนำ Android สำหรับผู้เริ่มต้น -4 โบนัส: ดาวน์โหลด Content Provider Code ที่นี่ . คุณต้องการรหัสนี้เมื่อคุณผ่านบทช่วยสอนแล้ว! :)
[dl url =” #” class =” eModal eModal-6″ title =” รหัสดาวน์โหลด” desc =”” type =”” align =”” for =” download”]
บทช่วยสอน Android: ผู้ให้บริการเนื้อหา
ผู้ให้บริการเนื้อหาอำนวยความสะดวกในการเข้าถึงที่เก็บข้อมูลส่วนกลางหรือคลังสินค้าเพื่อให้สามารถแบ่งปันข้อมูลและจัดการข้อมูลในแอปพลิเคชันต่างๆ
นี่คือตัวอย่างบางส่วนของผู้ให้บริการเนื้อหาเริ่มต้นใน API ของระบบ Android:
ผู้ให้บริการเนื้อหาเหล่านี้อนุญาตให้ผู้ใช้นามธรรมจากฐานข้อมูลพื้นฐาน โดยทั่วไปผู้ให้บริการเนื้อหาใช้ SQLite เพื่อจัดเก็บฐานข้อมูลพื้นฐาน
ให้เราใช้ตัวอย่างที่เป็นประโยชน์ของแอปพลิเคชั่น Facebook เก่า ๆ ที่ช่วยให้เราลดความซับซ้อนในการสอน Android ก่อนหน้านี้ได้เช่นกัน!
ทุกคนมีช่วงเวลาหนึ่งในชีวิตโซเชียลเน็ตเวิร์กอัปโหลดรูปไปยังไทม์ไลน์ Facebook ของคุณใช่ไหม! คุณจะทำอย่างไรมันได้หรือไม่?
เมื่อคลิกปุ่มรูปภาพบนผนังคุณจะไปที่แกลเลอรีรูปภาพ จากตรงนั้นคุณสามารถเลือกรูปภาพที่จะอัปโหลด
ได้อ่านบทความก่อนหน้าของ ชุดบทช่วยสอน Android คุณรู้เกี่ยวกับกิจกรรมและเจตนาดังนั้นคุณรู้ว่านี่คือสิ่งที่เกิดขึ้น:
Facebook Wall ของคุณคือ“ กิจกรรม” เมื่อคุณคลิกที่ปุ่มภาพถ่าย 'ความตั้งใจ' จะถูกส่งผ่านซึ่งจะสื่อถึงข้อความและ 'ผู้ให้บริการเนื้อหา' (คลังภาพ) จะเปิดขึ้น รูปภาพถูกอัปโหลดโดยใช้การอัปโหลดเครือข่าย 'SERVICE'
ดูวิดีโอถ่ายทอดสดนี้เพื่อทราบว่า Content Provider ทำงานอย่างไรในแอปพลิเคชัน Facebook ของคุณ
สถาปัตยกรรม mvc ใน java พร้อมไดอะแกรม
เหตุใดระบบ Android จึงต้องการผู้ให้บริการเนื้อหา
ความจำเป็นสำหรับผู้ให้บริการเนื้อหาเกิดขึ้นเนื่องจากฐานข้อมูลที่สร้างในแอปพลิเคชันหนึ่งไม่สามารถมองเห็นได้สำหรับแอปพลิเคชันที่สอง
การสร้างและจัดเก็บฐานข้อมูลในแอปพลิเคชันต่างๆโดยใช้ SQLite ทำได้ง่าย แต่ปัญหาคือ ฐานข้อมูลใน Android เป็นฐานข้อมูลส่วนตัวของแอปพลิเคชันที่สร้างขึ้น . ไม่มีพื้นที่เก็บข้อมูลทั่วไปใน Android ที่ทุกแอปพลิเคชันสามารถเข้าถึงได้ ดังนั้นสำหรับแอปพลิเคชันที่แตกต่างกันในการใช้ฐานข้อมูลระบบ Android จำเป็นต้องมีอินเทอร์เฟซที่ช่วยให้สามารถแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชันและระหว่างกระบวนการได้ นี่คือจุดที่ผู้ให้บริการเนื้อหาเข้ามาเล่น
ฉันต้องการผู้ให้บริการเนื้อหาหรือไม่?
1) คุณ ไม่จำเป็นต้องพัฒนาผู้ให้บริการของคุณเองหากคุณต้องการฐานข้อมูลส่วนตัว สำหรับแอปพลิเคชันเฉพาะ (ฐานข้อมูลนี้จะไม่สามารถเข้าถึงได้จากแอปพลิเคชันอื่นนอกเหนือจากที่สร้างขึ้น)
2) คุณอย่างไรก็ตาม ต้องการผู้ให้บริการที่กำหนดเองเพื่อให้คำแนะนำการค้นหาที่กำหนดเอง ในระบบแอปพลิเคชันของคุณเอง
3) คุณต้องมีผู้ให้บริการเนื้อหาด้วย เพื่อคัดลอกและวางข้อมูลที่ซับซ้อนจากแอปพลิเคชันของคุณไปยังแอปพลิเคชันอื่น
ผู้ให้บริการเนื้อหาสนับสนุนการดำเนินการอะไรบ้าง
ผู้ให้บริการเนื้อหาสนับสนุนการดำเนินการพื้นฐานดังต่อไปนี้:
หนึ่ง) การสอบถาม: เคียวรี Content Provider สำหรับอ็อบเจ็กต์ทั้งหมดโดยยึดตาม URI ที่ระบุ
2) ลบ: ลบอ็อบเจ็กต์ที่ระบุจากฐานข้อมูลของ Content Provider
3) อัปเดต: ทำการอัพเดตอ็อบเจ็กต์ในฐานข้อมูล
4) แทรก: แทรกวัตถุใหม่ในฐานข้อมูล
ขั้นตอนในการดำเนินการใน Content Provider
ขั้นตอนที่ 1: การเข้าถึงผู้ให้บริการเนื้อหา
วัตถุไคลเอนต์ ContentResolver ใช้เพื่อเข้าถึงข้อมูลจาก Content Provider มันสื่อสารกับวัตถุผู้ให้บริการซึ่งจะยอมรับคำขอในการเข้าถึงข้อมูลและส่งกลับผลลัพธ์ที่ต้องการ อินเทอร์เฟซการแลกเปลี่ยนข้อมูลที่จัดหาโดยอ็อบเจ็กต์ไคลเอ็นต์ของผู้ให้บริการและผู้ให้บริการช่วยให้สามารถสื่อสารข้ามกระบวนการ / แอปพลิเคชันต่างๆ
แอปพลิเคชันที่ต้องการเข้าถึงฐานข้อมูลจะต้องประกาศสิ่งนี้และขอสิทธิ์ในไฟล์รายการ สิ่งนี้จะกล่าวถึงโดยละเอียดในบทแนะนำ Android ที่ตามมาของเรา
URI เนื้อหา
URI เนื้อหาเป็นหนึ่งในอาร์กิวเมนต์ที่ใช้ในการระบุข้อมูลในผู้ให้บริการ มีสี่ส่วน:
หนึ่ง) โครงการ: โครงร่างสำหรับผู้ให้บริการเนื้อหามีค่าคงที่: 'เนื้อหา'
2) ผู้มีอำนาจ: เป็นชื่อสัญลักษณ์ของผู้ให้บริการและไม่ซ้ำกันสำหรับแต่ละราย นี่คือวิธีที่เราแยกผู้ให้บริการเนื้อหาที่ต้องการออกจากรายการจำนวนมาก
3) เส้นทาง: เส้นทาง ช่วยแยกแยะข้อมูลที่ต้องการจากฐานข้อมูลทั้งหมด . ตัวอย่างเช่นผู้ให้บริการเนื้อหาบันทึกการโทรแยกความแตกต่างระหว่างสายที่ไม่ได้รับสายที่ได้รับ ฯลฯ โดยใช้เส้นทางที่แตกต่างกัน
4) ID: ไม่ใช่องค์ประกอบบังคับและอาจไม่มีอยู่ใน URI แต่ถ้ามีอยู่ควรเป็นตัวเลข ตัวอย่างเช่น หากคุณต้องการเข้าถึงไฟล์เพลงเฉพาะจาก Media Content Provider ของคุณคุณจะต้องระบุ ID ด้วย .
กระบวนการ
การใช้สิทธิ์ผู้ให้บริการ ContentResolver จะระบุผู้ให้บริการเนื้อหาที่ถูกต้อง (เนื่องจากสิทธิพิเศษสำหรับผู้ให้บริการเนื้อหาแต่ละราย) เมื่อทำเช่นนั้นองค์ประกอบเส้นทางของ URI จะถูกใช้เพื่อเลือกตารางข้อมูลที่ถูกต้อง (ร้องขอ) ในกรณีที่มี ID อยู่ผู้ให้บริการจะทราบว่ามีการร้องขอข้อมูลใดที่แน่นอน
URI มีสองประเภท:
นอกจากนี้ URI สามารถมีข้อมูล จำกัด ได้เช่นกัน
ขั้นตอนที่ 2: วิธีดึงข้อมูลจากผู้ให้บริการเนื้อหา
แม้ว่า ContentResolver จะเข้าถึงตารางข้อมูลในขณะนี้ แต่ก็ไม่สามารถดึงข้อมูลที่ต้องการได้เว้นแต่แอปพลิเคชันจะมี “ สิทธิ์การเข้าถึงการอ่าน” สำหรับผู้ให้บริการรายนั้น ๆ สิทธิ์นี้กำหนดไว้ในไฟล์รายการของผู้ให้บริการเนื้อหาแต่ละราย
ทั้งหมดนั้นเป็นแอปพลิเคชัน (ที่ต้องการเข้าถึงฐานข้อมูลนี้) ต้องทำคือขออนุญาตนี้
ตามที่กล่าวไว้ก่อนหน้านี้ในบทช่วยสอน Android นี้ การดำเนินการสี่อย่างสามารถทำได้โดยใช้ผู้ให้บริการเนื้อหา . เราจะไปดูทีละคน
การค้นหา
ตอนนี้คุณได้เข้าถึงผู้ให้บริการและได้รับอนุญาตให้ดึงข้อมูลจากมัน ขั้นตอนต่อไปคือการ สร้างแบบสอบถามเพื่อร้องขอการดำเนินการที่ต้องการจากผู้ให้บริการ .
นี่คืออาร์กิวเมนต์ที่ใช้ในการสืบค้น:
หนึ่ง) เกลียด : ทำงานได้ตรงตามที่อธิบายไว้ข้างต้น
2) การฉายภาพ: แบบสอบถามควร ส่งคืนชุดคอลัมน์จากตารางฐานข้อมูลทั้งหมด . สิ่งนี้เรียกว่าการฉายภาพ การผ่าน null จะส่งคืนคอลัมน์ทั้งหมดซึ่งไม่มีประสิทธิภาพ
3) เงื่อนไขการเลือก: ถึง ตัวกรองประกาศว่าจะส่งคืนแถวใด จัดรูปแบบเป็นคำสั่ง SQL WHERE (ไม่รวม WHERE เอง) การผ่าน null จะส่งคืนแถวทั้งหมดสำหรับ URI ที่กำหนด
ตัวอย่างเช่นหากคุณป้อนตัวอักษร (พูดว่า 'P') ในคอลัมน์ค้นหาของสมุดรายชื่อของคุณระบบจะส่งคืนรายละเอียดการติดต่อทั้งหมดที่ขึ้นต้นด้วย 'P' อย่างไรก็ตามหากคุณไม่ได้ป้อนข้อมูลใด ๆ ในแถบค้นหารายชื่อผู้ติดต่อทั้งหมดจะถูกเรียกคืน (ส่วนคำสั่งการเลือกถูกตั้งค่าเป็น 'null' ในกรณีเช่นนี้)
4) อาร์กิวเมนต์การเลือก: คุณอาจรวม“? s” ไว้ในส่วนที่เลือกซึ่งจะถูกแทนที่ด้วยค่าจาก selectionArgs ตามลำดับที่ปรากฏในส่วนที่เลือก
5) SortOrder: SQL ORDER BY clause (ไม่รวม ORDER BY เอง) การผ่าน null จะดึงผลลัพธ์ซึ่งอาจไม่เรียงลำดับ
ตัวอย่างรหัสสำหรับการสืบค้น:
- ค้นหาหมายเลขโทรศัพท์ในรายชื่อ
เคอร์เซอร์เคอร์เซอร์ = contentresolver.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null) int count = cursor.getCount () if (count> 0) {String contactDetails = '' while (cursor.moveToNext ()) { String columnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex (columnId) String id = cursor.getString (cursorIndex) String name = cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)) int numCount = (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone '? , สตริงใหม่ [] {id}, null) ในขณะที่ (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Name:' + name + ', เบอร์โทรศัพท์:' + phoneNo + ''} phoneCursor.close ()}}}
การแทรก
ให้เราสมมติว่าคุณต้องการแทรกรายชื่อใหม่ในสมุดที่อยู่ของคุณ วัตถุ ContentValues ใช้เพื่อทำการแทรกเหล่านี้ คีย์ออบเจ็กต์ ContentValue และคอลัมน์ Content Provider ต้องตรงกันเพื่อให้บรรลุสิ่งนี้ นี่คือตัวอย่างสำหรับสิ่งนี้:
ตัวอย่างรหัสสำหรับการแทรก:
- การดำเนินการคือการใส่รายการใหม่ชื่อ“ ราชนิกันต์” และหมายเลข“ 9988999888”
// ปฏิบัติการ ArrayList ops = ArrayList ใหม่ () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (RawContacts.ACCOUNT) ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI). withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue (โครงสร้าง) .withValue (โครงสร้าง). ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI). withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue (Phone.NUMPEal999”. , Phone.TYPE_MOBILE) .build ()) getContentResolver (). applyBatch (ContactsContract.AUTHORITY, ops)
การอัปเดต
ในการอัพเดตผู้ให้บริการเนื้อหาจะใช้อาร์กิวเมนต์ต่อไปนี้:
หนึ่ง) เกลียด: URI ของผู้ให้บริการเนื้อหา
fibonacci ใน c ++
2) ContentValues: ซึ่งประกอบด้วยค่าที่จะแทนที่ข้อมูลที่มีอยู่
3) เงื่อนไขการเลือก: สิ่งนี้สามารถช่วยเลือกระเบียนเฉพาะที่จะอัปเดต
4) อาร์กิวเมนต์การเลือก: คุณอาจรวม“? s” ไว้ในส่วนที่เลือกซึ่งจะถูกแทนที่ด้วยค่าจาก selectionArgs ตามลำดับที่ปรากฏในส่วนที่เลือก
อีกครั้ง คีย์ของออบเจ็กต์ ContentValues ต้องตรงกับคอลัมน์ใน Content Provider มิฉะนั้นการอัปเดตจะไม่เกิดขึ้น
ตัวอย่างรหัสสำหรับการอัปเดต:
- การอัปเดตหมายเลขโทรศัพท์ที่ชื่อ“ ราชนิกันต์”
สตริงที่ = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“ Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (โดยที่ params) .withValue (ContactsContract.CommonDataKinds. Phone.NUMBER,“ 9876543210”) .build ()) getContentResolver (). applyBatch (ContactsContract.AUTHORITY, ops)
การลบ
การลบใช้อาร์กิวเมนต์เดียวกับการอัปเดตโดยยกเว้นอาร์กิวเมนต์ ContentValues ซึ่งไม่จำเป็นเนื่องจากจะไม่มีค่าทดแทนใด ๆ
ตัวอย่างรหัสสำหรับการลบ:
- ลบผู้ติดต่อโดยที่ชื่อ“ Rajnikant”
สตริงที่ = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“ Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (where, params) .build ()) getContentResolver ( ) .applyBatch (ContactsContract.AUTHORITY, ops)
ในกรณีของการดำเนินการแทรก URI ต้องเป็นไดเร็กทอรี ในกรณีอื่น ๆ ทั้งหมด URI สามารถเป็นได้ทั้ง ID ตามหรือตามไดเร็กทอรี
เราหวังว่า บทช่วยสอน Android สำหรับผู้เริ่มต้น: ตอนที่ 5 ไม่ยากเกินความเข้าใจ! เราจะพูดคุยเพิ่มเติมเกี่ยวกับผู้ให้บริการเนื้อหาในบทช่วยสอน Android ที่ตามมา สนุกกับการเรียนรู้พื้นฐานจนถึงตอนนั้น!
คุณมีข้อสงสัยในบทช่วยสอน Android นี้หรือไม่? ถามเรา.
มีความสุขในการเรียนรู้!
ทรัพยากรต่อไปนี้ถูกใช้ในการสร้างบทช่วยสอน Android นี้! นักพัฒนา Android อย่างเป็นทางการ , Edureka.in