Amaliy qism.
Bu kod biroz soddalashtirilgan. Haqiqiy misolda qo'shimcha izohlar va o'rashlar bo'ladi. Ammo u umumiy ma'noni to'liq ifodalaydi. Qayta jihozlash ushbu interfeysni amalga oshiradigan sinf yaratadi. Bu sinf ichida serverga qo'ng'iroqlar ishlab chiqariladi.
Va bu interfeysda biz usullarning nomlarini va ba'zi HTTP narsalarini sozlashimiz mumkin, masalan, uzatilgan parametrlar (so'rov), sarlavhalar (sarlavha) va boshqalar..
GetProducts usulining tavsifini batafsil ko'rib chiqaylik.:
@GET("getProducts")
List
getProducts();
GET izohi getProducts uchun HTTP so'rovi GET turida bo'lishi kerakligini bildiradi. Va bu izoh uchun parametr sifatida biz serverdagi usul nomini ko'rsatishimiz kerak. E'tibor bering, asosiy URL (http: // server / api / v1 /) bu erda ko'rinmaydi. Biz buni keyinroq, quruvchida ko'rsatamiz.
ro'yxati - qaytarish turi. Qayta jihozlash o'zi json ma'lumotlarini Mahsulot ob'ektlari ro'yxatiga o'zgartirishi mumkin. Quruvchi munozarasi paytida biz ham bu haqda batafsilroq gaplashamiz.
Xo'sh, usulning nomi getProducts (). Bu misolda, bu serverdagi usul nomi bilan bir xil. Lekin bu ixtiyoriy. Bular. buni yaxshi qila olasiz
@GET("getProducts")
List
getProductList();
Endi usul nomlari boshqacha. Siz kodda getProductList usulini chaqirasiz va serverda getProducts chaqiriladi.
Keling, mashg'ulotlarga kiraylik. Retrofit -ni loyihangizda, build.gradle faylida, bog'liqliklar bo'limiga bog'liqliklar qo'shing:
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
Birinchi qator - bu Retrofitning o'zi, ikkinchisi - Gson konvertori.
Eslatib o'taman, bizda havola bor: https://rawgit.com/startandroid/ data/master/messages/messages1.json.
Bu bizga json ma'lumotlarini qaytaradi, bu xabarlar ro'yxati. Har bir xabarda id, vaqt, matn va ba'zan tasvirlar maydonlari mavjud. Bu havola, albatta, API emas, balki faqat matnli fayl, lekin ma'nosi o'zgarishsiz qoladi, faqat usul nomi o'rniga bizda fayl nomi bo'ladi..
Biz havolani ikki qismga ajratdik: "https://rawgit.com/startandroid/data/ master/messages/" - asosiy URL (quruvchida ko'rsatiladi) "messages1.json" - fayl nomi (interfeysda, GET izohida ko'rsatiladi)
Biz ushbu havola bilan ishlash uchun interfeys yaratishimiz mumkin. Faqat bitta usul bo'ladi va u ro'yxatini qaytaradi.
vval Message sinfini yarataylik..
public class Message {
private long id;
private long time;
private String text;
private String image;
// getters and setters
}
Uning maydonlari messages1.json ma'lumotlaridagi maydonlarga to'g'ri keladi.
Endi biz interfeysni yaratamiz:
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
public interface MessagesApi {
@GET("messages1.json")
Call> messages();
}
GET izohida biz kerakli havolani olish uchun "messages1.json" ni asosiy URL manziliga qo'shish kerakligini bildiramiz.
Qo'ng'iroqqa e'tibor bering. Qayta ishlash uchun bu o'rash kerak. Unda, biz messages1.json -dan qanday ma'lumotlarni olishni kutayotganimizni ko'rsatamiz - ya'ni. ro'yxati.
Interfeys yaratildi, endi biz quruvchiga murojaat qilamiz:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://rawgit.com/startandroid/data/master/messages/")
.addConverterFactory(GsonConverterFactory.create())
.build();
Quruvchida biz asosiy URLni ko'rsatamiz va Gson konvertorini qo'shamiz, shunda Retrofit o'zi json ma'lumotlarini Xabar ob'ektlariga o'zgartirishi mumkin. Bu oddiy misol uchun bizdan talab qilinadigan minimal parametr. Murakkab holatlar uchun parametrlar soni ko'proq bo'lishi mumkin.
Natijada, bizda asosiy URL va Gson yordamida json ma'lumotlarini o'zgartirish qobiliyatini o'z ichiga olgan Retrofit ob'ekti bor. Biz uni interfeys sinfining yaratish uslubiga o'tkazamiz, unda biz usullarni ta'riflaganmiz.
MessagesApi messagesApi = retrofit.create(MessagesApi.class);
Va biz MessagesApi dasturini Retrofitdan olamiz. Ushbu dastur interfeysdagi quruvchi sozlamalarini (asosiy URL va Gson konverteri) va usul tavsiflarini birlashtiradi (messages1.json faylini olish uchun xabarlar usuli). Natijada, Retrofit ishlab chiqaruvchidan asosiy URLni oladi, unga GET interfeysida biz ko'rsatgan yo'lning qolgan qismini biriktiradi va shu orqali to'liq havolani oladi..
Ehtimol, nima uchun funksionallik quruvchi va interfeysga bo'lingan degan savol tug'iladi. Men sizga o'z amaliyotimdan bir nechta misol keltira olaman.
1) Internet -do'konda ikkita server mavjud: ishlaydigan (haqiqiy ma'lumotlar bilan) va sinovli. Har ikkalasida ham bir xil API o'rnatilgan. Va server bilan aloqa o'rnatadigan dastur mavjud. Ilovaning disk raskadrovka versiyasi test serveri bilan ishlashi va u haqidagi barcha ma'lumotlarni qayd qilishi kerak. Chiqarish versiyasi ishlab chiqarish serveri bilan ishlaydi va hech narsa yozmaydi.
Debug va Release versiyalari o'rtasidagi bu farqni ikki xil quruvchi amalga oshirishi mumkin. Biz faqat ular uchun har xil asosiy URL -larni va har xil jurnal sozlamalarini ko'rsatamiz. Va ikkala holatda ham interfeys bir xil ishlatiladi.
2) API bilan server mavjud. Va bu usullarni chaqiradigan dastur mavjud. Avtorizatsiya serverda amalga oshiriladi. Bular. ilova avtorizatsiya usulini chaqirishi, token olishi va foydalanuvchi bilan bog'langan ba'zi API usullarini chaqirganda ushbu tokendan foydalanishi kerak.
Quruvchi barcha qo'ng'iroqlarga belgi qo'shadigan maxsus ishlovchidan foydalanish imkoniyatiga ega. Lekin biz tokenni hammaga emas, faqat ba'zi qo'ng'iroqlarga qo'shishimiz kerak.
Do'stlaringiz bilan baham: |