7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Android SDK

Android fundamental: Bekerja dengan Content Provider

Read Time: 11 mins
This post is part of a series called Android Fundamentals.
Android Fundamentals: Properly Loading Data

Indonesian (Bahasa Indonesia) translation by Dika Budiaji (you can also view the original English article)

Aplikasi TutList yang telah kita kerjakan dengan memiliki cacat cukup besar sekarang: data artikel adalah tidak "hidup", tetapi statis konten. Dalam tutorial ini, Anda mengambil beberapa langkah-langkah lain menuju solusi yang fleksibel dan dapat diperluas dengan memodifikasi aplikasi untuk bertindak sebagai penyedia konten yang didukung data.

Framework Android menggunakan konsep yang disebut content provider untuk mengaktifkan aplikasi untuk berbagi dan menggunakan data di seluruh platform. Biasanya, penyedia didukung oleh SQLite database adalah menyimpan data yang mendasarinya. Keadaan saat ini aplikasi TutList adalah sedemikian rupa sehingga mendapat data untuk ListView dari array string statis di resource. Dalam tutorial ini, kami akan menghapus resource data fixed dan membangun fleksibel database-driven content provider di tempat mereka. Anda akan melihat bahwa kode user interface tidak berubah banyak. Back-end, namun, akan lebih kompleks. Keuntungan di sini adalah bahwa ketika kita akhirnya beralih aplikasi untuk mengambil data langsung dari Internet, kita akan memiliki tempat untuk menyimpan dan mengelolanya dengan mudah.

Tutorial ini akan lebih cepat daripada beberapa tutorial tingkat pemula kami; Anda mungkin harus meninjau beberapa tutorial Android lain di situs ini atau bahkan di Android SDK referensi jika Anda tidak terbiasa dengan salah satu kelas yang dibahas dalam tutorial ini dan konsep-konsep dasar Android. Anda dapat membaca SQLite Crash course untuk pengembang Android tutorial untuk me-refresh pengetahuan SQLite Anda. Kode sampel akhir yang menyertai tutorial ini tersedia untuk di-download sebagai open source dari Google kode hosting.

Langkah 0: Persiapan

Tutorial ini mengasumsikan Anda akan mulai di mana kami terakhir tutorial, Android kompatibilitas: bekerja dengan fragmen, berhenti. Anda dapat men-download kode dan membangun dari sana atau Anda dapat men-download kode untuk tutorial ini dan Ikuti sepanjang. Bagaimanapun, bersiap-siap dengan mengunduh satu atau proyek lain dan mengimpornya ke Eclipse.

Langkah 1: Membuat Database kelas

Pertama, Anda harus membuat database SQLite mendasari aplikasi. Mulai dengan buat kelas baru bernama TutListDatabase yang extend dari SQLiteOpenHelper. Kami menempatkan dalam package com.mamlambo.tutorial.tutlist.data untuk memisahkan dari bagian antarmuka pengguna app. Sementara kau di itu, menentukan informasi konfigurasi database di dalam kelas, seperti nama database dan nomor versi. Kami telah melakukan ini dengan constants. Akhirnya, pemakaian update konstruktor kelas TutListDatabase untuk referensi nilai-nilai ini, sebagai berikut:

Kita akan mendapatkan untuk implementasi metode onCreate() dan onUpgrade() segera.

Langkah 2: Mendefinisikan skema Database

Data artikel awal kami telah hanya dua bidang data: title dan link. Ada alasan untuk tidak menjaga struktur semacam ini dalam database SQLite kami. Kita akan membutuhkan _id wajib field, juga, yang bertindak sebagai pengidentifikasi unik untuk setiap record. Kita akan memanggil tutorial tabel ini.

Skema ini sederhana akan sesuai untuk kita sekarang. Untuk menyederhanakan penggunaan dan membantu dengan aspek-aspek lain dari sistem, kita akan mendefinisikan kolom, table, dan bahkan membuat pernyataan sebagai string statis di kelas TutListDatabase, seperti:

Langkah 3: Membuat Database

Membuat Database sekarang harus jadi mudah. Dalam metode onCreate(), cukup Jalankan DB_SCHEMA string sebagai SQL untuk membuat tabel yang Anda tetapkan pada langkah sebelumnya:

Ini mungkin menjadi kesempatan yang baik untuk Insertkan beberapa sample data (artikel) untuk digunakan. Anda bisa menggunakan perintah "INSERT INTO" SQLite command. Lihat kode download untuk contoh tentang bagaimana untuk melakukan hal ini.

Langkah 4: Upgrade Database

Karena database baru, kita tidak memiliki upgrade policy kita perlu mengikuti. Oleh karena itu, kita akan hanya drop tabel dan membuatnya jika permohonan upgrade dibuat.

Jika database versi ditambah dan aplikasi yang diinstal atas instalasi yang ada, kode ini akan di trigger. Peringatan, hanya terbukti LogCat, hanya menyatakan bahwa isi yang ada akan hilang. Jika Anda menerapkan sampel konten pembuatan sebagai bagian dari langkah sebelumnya, konten awal akan dikembalikan selama penciptaan. Dalam aplikasi yang di publish menyimpan data penting pengguna, Anda mungkin ingin melakukan segala kemungkinan untuk menyimpan data itu dengan memigrasi itu dari skema lama untuk skema yang baru. Namun, untuk contoh ini sederhana, ada sedikit kebutuhan untuk ketentuan tersebut.

Karena skema database tidak berubah dan tetap kompatibel, tidak ada alasan untuk memperbarui versi database. Isinya database akan tetap utuh.

Step 5: Membuat kelas Content Provider

Sekarang bahwa aplikasi Anda memiliki database yang fungsional, Anda dapat mengubah perhatian Anda untuk menerapkan content provider untuk mengakses, mengekspos, dan mengelola data artikel yang disimpan di sana. Dimulai oleh membuat kelas baru bernama TutlistProvider yang extend kelas ContentProvider. Berikan sebuah private member variable untuk memegang sebuah instance dari TutListDatabase. Instantiate database dalam onCreate() metode:

Langkah 6: Mempersiapkan Constants Helper dan Matcher

Content Provider bekerja dengan data di tingkat URI. Sebagai contoh, URI ini mengidentifikasi semua Tutorial:

Namun, identifikasi ini tidak benar-benar terjadi oleh magic. Sebaliknya, kelas content provider umumnya menyediakan beberapa konstanta umum yang dapat digunakan oleh aplikasi untuk mengidentifikasi data yang mereka inginkan untuk query. Di dalam penyedia konten, bantuan tersedia untuk menentukan apa jenis URI sedang berlalu dalam. Ini akan menjadi lebih jelas dengan contoh-contoh yang datang dan kode.

Untuk sekarang, di sini adalah satu set konstanta yang ditemukan di kelas TutListProvider menggunakan berbagai metode dan untuk digunakan oleh kelas eksternal yang menggunakan content provider ini:

Dicatat definisi yang pribadi dan yang bersifat publik — ini tujuannya. Definisi umum akan digunakan oleh bagian-bagian lain dari aplikasi (atau aplikasi lain yang ingin mengakses data content provider). Definisi prviate adalah untuk penggunaan internal oleh kelas hanya dan tidak dapat dipakai oleh kelas lain. Untuk menentukan apa jenis URI alamat dioperkan ke content provider, kita dapat memanfaatkan kelas helper yang disebut UriMatcher untuk menentukan tertentu URI pola content provider yang di support. Inilah UriMatcher untuk content provider kita, yang ditetapkan secara statis di tingkat kelas di dalam TutListProvider:

UriMatcher ini mendefinisikan dua jenis URI. Terlihat seperti contoh salah satu dari atas. Yang lain hanya ditambahkan dengan sebuah slash (/) mengikuti dengan nomor. Jenis URI digunakan untuk memasok pengidentifikasi unik untuk artikel khusus, sehingga dapat kembali satu entri.

Langkah 6: Menangani Content Provider Query

Content provider memiliki beberapa metode yang harus kita override. Satu-satunya kami tertarik saat ini adalah metode query(). Yang lainnya adalah delete(), getType(), insert() dan update() akan kita coba di dekat akhir tutorial.
Metode query() awalnya terlihat kompleks dengan parameter lima, termasuk dua array. Ternyata, Android SDK memiliki kelas helper lain yang sangat menyederhanakan penerapan metode ini. Kelas SQLiteQueryBuilder adalah apa yang kita cari. Berikut ini adalah implementasi lengkap dan sederhana, metode query():

Untuk memulai, kita mendapatkan sebuah instance baru dari SQLiteQueryBuilder kelas. Kemudian kita menggunakan metode setTables() untuk menetapkan tabel kita sedang bekerja dengan-dalam hal ini, hanya tabel tutorials. Selanjutnya kami menggunakan UriMatcher kelas untuk melakukan angkat berat untuk menentukan apakah query untuk satu entri atau semua entri. Jika ini adalah single entri, kita tambah klausa untuk filter berdasarkan id unik.
Selanjutnya, kita memanggil metode query() kelas SQLiteQueryBuilder. Ternyata bahwa  banyak parameter yang sama seperti yang di passing kepada metode query() kami--sehingga kita hanya melewati mereka bersama-sama. Kemudian kita kembali cursor baru dibuat.
Metode setNotificationUri() tempat simpel untuk melihat di caller content resolver seperti jika data berubah dan caller sudah mendaftar watcher change, akan di informasikan Di sini kita hanya menggunakan URI sama.

Langkah 7: Mendaftar Content Provider

Seperti Acvitiy kelas, Content Provider harus benar terdaftar dalam file Android Manifest. Ini berarti menambahkan bagian dalam bagian file, seperti berikut:

Atribut yang berwenang harus sesuai dengan AUTHORITY yang didefinisikan di kelas TutListProvider seperti itu adalah otoritas digunakan dengan URI. Atribut name harus nama kelas memenuhi syarat content provider.

Langkah 8: Memperbarui ListView

Dengan implementasi content provider selesai, mari kita memperbarui aplikasi untuk menggunakannya! Dalam kelas TutListFragment, update onCreate() metode untuk menggunakan content provider baru sebagai berikut:

Proyeksi ini adalah hanya daftar kolom untuk digunakan dengan adapter. ListView menggunakan title dan dapat memberikan id bila item diklik. Untuk digunakan dengan adaptor, kolom id harus diberi nama "_id"--yang telah kami lakukan.

Selanjutnya, Anda harus memperbarui metode onListItemClick() ListView. Sebelumnya, kami hanya menggunakan posisi untuk melihat tautan dalam array. Sekarang kita akan menggunakan id unik-yang cocok database id, cukup-- melihat link di basis data melalui simple query ke content provider:

Di sini, kami meminta kolom URL dan menggunakan URI konten dengan id ditambahkan untuk itu. Cukup sederhana, kan?

Dan coba tebak? Anda selesai! Anda dapat menjalankan aplikasi sekarang dan harus melihat--dan berperilaku--persis seperti itu sebelumnya. Namun, bukan data yang bersumber dari resource yang tetap, app sekarang menyimpan datanya di rumah baru, meningkatkan — database, dan diakses melalui mekanisme sederhana — content provider.

Semua itu, dan kita kembali mana kita mulai. Terasa agak antiklimaks, ya? Sebenarnya, ini belum selesai. Anda harus menyelesaikan sisa metode content provider.

Langkah 9: Finishing Content Provider

Meskipun aplikasi belum menggunakan insert(), update(), getType(), atau delete() metode, itu akan di yang akan datang ketika Anda mulai meraih "live" tutorial data dari remote source. Pelaksanaan setiap metode tersebut mengikuti pola yang mirip dengan metode query(). Sebagai contoh, di sini adalah penerapan metode delete():

Beberapa baris pertama menentukan jenis URI masuk dan membuka writable database. Kemudian, jika URI poin ke daftar, mungkin dengan filter, kita hanya menghapus itu. Perhatikan bahwa URI tanpa filter (seleksi dan selectionArgs) akan menghapus semua entri. Jika tidak, kami menghapus berdasarkan ID tertentu--dengan atau tanpa filter.
Sisa metode yang ditemukan di download (dan online dapat dilihat) kode sumber terbuka. Mereka serupa dan Anda harus mampu membaca melalui mereka untuk melihat bagaimana mereka bekerja. Intinya adalah bahwa mereka masing-masing melakukan hal yang "benar" tergantung pada jenis URI. Karena content provider ini database-backed, hal yang benar biasanya melibatkan memanggil metode SQLite setara, yang sangat menyederhanakan interface implementation.

Kesimpulan

Tutorial ini yang telah diajarkan kepadamu tidak hanya bagaimana untuk membuat sebuah database SQLite dan membungkusnya dalam content provider, tetapi juga cara mudah untuk menggunakan content provider untuk mengisi kontrol ListView. Di tutorial yang akan datang, kami akan memperluas aplikasi ini lebih lanjut untuk mengisi aplikasi dengan fresh database, live konten tutorial dan banyak lagi.
Kami berharap Anda menikmati tutorial ini. Kami berharap dapat umpan balik Anda dari kerumitan dari materi yang dibahas.

Tentang penulis

Pengembang mobile Lauren Darcey dan Shane Conder telah menulis beberapa buku tentang Android pengembangan: buku pemrograman mendalam berjudul Android pengembangan aplikasi Wireless dan Sams mengajar diri sendiri pengembangan aplikasi Android dalam 24 jam. Ketika tidak menulis, mereka menghabiskan waktu mereka mengembangkan perangkat lunak mobile di perusahaan mereka dan menyediakan jasa konsultasi. Mereka dapat dihubungi di via email ke [email protected], melalui blog mereka androidbook.blogspot.com, dan Twitter @androidwireless.

Perlu lebih banyak bantuan menulis aplikasi Android? Memeriksa buku-buku terbaru dan sumber daya kami!

Buy Android Wireless Application Development, 2nd Edition Buy Sam's Teach Yourself Android Application Development in 24 Hours Mamlambo code at Code Canyon

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.