Mavzu: Android studio muhitida tarmoqli dasturlash. Google Map bilan ishlash.
Reja:
1. AsyncTask, Volley, Retrofit 2 klasslari
2. Google Map
AsyncTask interfeysi ipidan to'g'ri va oson foydalanishni ta'minlashga mo'ljallangan. Biroq, eng keng tarqalgan foydalanish interfeysi interfeysga qo'shilish uchun ishlatilgan va bu kontekstni qochqinlarni, o'tkazib yuborilgan qo'ng'iroqlarni yoki konfiguratsiyani o'zgartirishda buzilishlarni keltirib chiqaradi. Shuningdek, u platformaning turli xil versiyalarida nomuvofiq harakatlarga ega, istisnolarni yutib yuboradi doInBackgroundva Executorto'g'ridan-to'g'ri s dan foydalanish uchun juda foydali emas .
AsyncTask atrofdagi yordamchi sinf sifatida yaratilgan Threadva Handler umumiy ish zarrachalarini tashkil etmaydi. AsyncTasks-dan qisqa muddatli operatsiyalar uchun foydalanish kerak (ko'pi bilan bir necha soniya.) Agar siz uzoq vaqt davomida ish zarralarini ushlab turishingiz kerak bo'lsa , va , java.util.concurrentkabi paketlar tomonidan taqdim etilgan turli xil API-lardan foydalanish tavsiya etiladi .ExecutorThreadPoolExecutorFutureTask
Asinxron vazifa fon chizig'ida ishlaydigan va natijasi foydalanuvchi interfeysi satrida e'lon qilingan hisoblash orqali aniqlanadi. Vaqt mos kelmaydigan vazifa 3 umumiy turdagi, deb nomlangan bilan belgilanadi Params, Progressva Result, va 4 qadamlar chaqirdi onPreExecute, doInBackground, onProgressUpdateva onPostExecute.
Kodi:
public class fetchData extends AsyncTask {
String data ="";
String dataParsed = "";
String singleParsed ="";
@Override
protected Void doInBackground(Void... voids) {
try {
URL url = new URL("http://www.json-generator.com/api/json/get/coLPywhGqa?indent=2");
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while(line != null){
line = bufferedReader.readLine();
data = data + line;
}
JSONArray JA = new JSONArray(data);
for(int i =0 ;i < JA.length(); i++){
JSONObject JO = (JSONObject) JA.get(i);
singleParsed = "Name:" + JO.get("name") + "\n"+
"Password:" + JO.get("password") + "\n"+
"Contact:" + JO.get("contact") + "\n"+
"Country:" + JO.get("country") + "\n";
dataParsed = dataParsed + singleParsed +"\n" ;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
MainActivity.data.setText(this.dataParsed);
}
}
AsyncTask ning umumiy turlari
Asenkron vazifa tomonidan ishlatiladigan uchta tur quyidagilar:
1 Params, bajarilgandan so'ng vazifaga yuborilgan parametrlarning turi.
2 Progress, fonni hisoblash paytida e'lon qilingan progress birliklarining turi.
3 Result, fonni hisoblash natijasining turi.
Hamma vaqt ham asenkron vazifa tomonidan ishlatilmaydi. Turni foydalanilmagan deb belgilash uchun quyidagi turdan foydalaning Void:
4 qadam
Asenkron vazifa bajarilganda, vazifa 4 bosqichdan o'tadi:
onPreExecute(), vazifa bajarilishidan oldin UI satrida chaqirilgan. Ushbu qadam odatda vazifani sozlash uchun ishlatiladi, masalan, foydalanuvchi interfeysida rivojlanish satrini ko'rsatish.
doInBackground(Params...), onPreExecute()ijro etilgandan so'ng darhol fon chizig'iga chaqirildi . Ushbu qadam uzoq vaqt talab qilishi mumkin bo'lgan fonni hisoblash uchun ishlatiladi. Asinxron vazifaning parametrlari ushbu bosqichga o'tkaziladi. Hisoblash natijasi ushbu qadam bilan qaytarilishi va oxirgi bosqichga o'tkazilishi kerak. Ushbu qadam, shuningdek, publishProgress(Progress...)bir yoki bir nechta rivojlanish birliklarini nashr qilish uchun ishlatilishi mumkin . Ushbu qiymatlar interfeys satrida, onProgressUpdate(Progress...)qadamda e'lon qilinadi.
onProgressUpdate(Progress...), qo'ng'iroqdan so'ng interfeys interfeysi chaqirildi publishProgress(Progress...). Amalga oshirish muddati aniqlanmagan. Ushbu usul foydalanuvchi interfeysida rivojlanishning har qanday shaklini fonda hisoblash hali bajarilayotgan paytda ko'rsatish uchun ishlatiladi. Masalan, u harakat satrini animatsiya qilish yoki matn maydonidagi jurnallarni ko'rsatish uchun ishlatilishi mumkin.
onPostExecute(Result), fonni hisoblash tugagandan so'ng interfeys interfeysida chaqirildi. Fon hisoblash natijasi parametr sifatida ushbu bosqichga uzatiladi.
Vazifani bekor qilish
Vazifani istalgan vaqtda chaqirish orqali bekor qilish mumkin cancel(boolean). Ushbu usulni chaqirish keyingi qo'ng'iroqlarning isCancelled()haqiqiyligini qaytarishiga olib keladi. Ushbu usulni chaqirgandan so'ng onCancelled(java.lang.Object), o'rniga qaytganidan onPostExecute(java.lang.Object)keyin chaqiriladi doInBackground(java.lang.Object[]). Vazifani iloji boricha tezroq bekor qilinishini ta'minlash uchun , agar iloji bo'lsa (masalan, tsikl ichida) isCancelled()vaqti-vaqti bilan qaytish qiymatini tekshirishingiz kerak doInBackground(java.lang.Object[]).
Tarmoq qoidalari
Ushbu sinfning to'g'ri ishlashi uchun bir nechta oqim qoidalariga rioya qilish kerak:
AsyncTask klassi foydalanuvchi interfeysida yuklanishi kerak. Dan boshlab avtomatik ravishda amalga oshiriladi Build.VERSION_CODES.JELLY_BEAN.
Vazifa misoli foydalanuvchi interfeysida yaratilishi kerak.
execute(Params...) foydalanuvchi interfeysida chaqirilishi kerak.
Qo'ng'iroq qilmang onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)qo'lda.
Vazifa faqat bir marta bajarilishi mumkin (agar ikkinchi marta bajarishga urinish bo'lsa, istisno qo'yiladi).
Xotirani kuzatish qobiliyati
AsyncTask barcha qayta qo'ng'iroqlar sinxronlashtirilishini kafolatlaydi va aniq sinxronizatsiya qilinmasdan quyidagilarni ta'minlaydi.
Xotira effektlari onPreExecute()va qo'ng'iroqdan oldin bajarilgan boshqa narsalar execute(Params...), shu jumladan AsyncTask ob'ekti qurilishi ko'rinadi doInBackground(Params...).
Ning xotira effektlari doInBackground(Params...)ko'rinib turadi onPostExecute(Result).
doInBackground(Params...)Qo'ng'iroqdan oldingi har qanday xotira effektlari publishProgress(Progress...)mos keladigan onProgressUpdate(Progress...)qo'ng'iroqda ko'rinadi . (Ammo ishlashda doInBackground(Params...)davom etmoqda va keyingi yangilanishlar doInBackground(Params...) davom etayotgan onProgressUpdate(Progress...)qo'ng'iroqqa xalaqit bermasligi uchun ehtiyot bo'lish kerak .)
Qo'ng'iroq oldidagi har qanday xotira effektlari qo'ng'iroqdan cancel(boolean)keyin isCancelled()natijani qaytaradigan yoki natijada qo'ng'iroq paytida va undan keyin ko'rinadi onCancelled().
Ijro tartibi
Birinchi marta kiritilganda, AsyncTasks bitta ketma-ket ish zarrachasida ketma-ket bajarilgan. Boshidan boshlab Build.VERSION_CODES.DONUT, bu bir nechta vazifalarni parallel ravishda ishlashiga imkon beradigan iplar to'plamiga o'zgartirildi. Boshlab Build.VERSION_CODES.HONEYCOMB, vazifalari parallel bajarilishi tufayli umumiy dastur xatolarini oldini olish uchun bitta ip olib boriladi.
Agar siz chindan ham parallel bajarilishini bo'lsangiz, siz duo mumkin executeOnExecutor(java.util.concurrent.Executor, java.lang.Object[])bo'lgan THREAD_POOL_EXECUTOR.
Volley - bu Android ilovalari uchun tarmoqni osonlashtiradigan va eng muhimi, tezroq bajaradigan HTTP kutubxonasi. Volley GitHub-da mavjud .
Volley quyidagi afzalliklarni taqdim etadi:
Tarmoq so'rovlarini avtomatik ravishda rejalashtirish.
Bir vaqtning o'zida bir nechta tarmoq ulanishlari.
Shaffof disk va xotira javobining standart HTTP kesh muvofiqligi bilan keshlash .
So'rovlarning ustuvorligini qo'llab-quvvatlash.
Bekor qilish so'rovi API. Siz bitta so'rovni bekor qilishingiz yoki bekor qilish uchun bloklar yoki so'rovlar doirasini o'rnatishingiz mumkin.
Moslashtirish qulayligi, masalan, qayta urinish va orqaga qaytish uchun.
Tarmoqdan asenkron ravishda olingan ma'lumotlar bilan interfeysni to'g'ri to'ldirishni osonlashtiradigan kuchli buyurtma.
Nosozliklarni tuzatish va izlash vositalari.
Volley foydalanuvchi interfeysini to'ldirish uchun ishlatiladigan RPC tipidagi operatsiyalardan ustun turadi, masalan, tuzilgan ma'lumotlar sifatida qidiruv natijalarining sahifasini olish. U har qanday protokol bilan osonlikcha birlashadi va xom satrlarni, rasmlarni va JSON-ni qo'llab-quvvatlaydi. Sizga kerak bo'lgan funktsiyalar uchun ichki ko'makni taqdim etish orqali Volley sizni qozon kodini yozishdan xalos qiladi va sizning ilovangizga xos mantiqqa e'tiboringizni qaratishga imkon beradi.
Volley katta yuklab olish yoki oqim operatsiyalari uchun mos emas, chunki Volley tahlil paytida barcha javoblarni xotirada saqlaydi. Katta hajmdagi yuklab olish operatsiyalari uchun alternativadan foydalanishni o'ylab ko'ring DownloadManager.
Volley-ning asosiy kutubxonasi GitHub-da ishlab chiqilgan bo'lib , unda asosiy so'rovlar yuborish quvuri va shuningdek, Volley "asboblar qutisi" da mavjud bo'lgan keng tarqalgan qo'llaniladigan dasturlar to'plami mavjud. Volley-ni loyihangizga qo'shishning eng oson usuli bu sizning ilovangizning build.gradle fayliga quyidagi bog'liqlikni qo'shishdir:
Google Maps loyihasini yarating
Ochiq Android Studio, va sekin urish Yangi loyiha yaratish yilda Android Studio uchun xush kelibsiz oynasi.
" Yangi loyiha" oynasida " Telefon va planshet" toifasi ostida " Google Maps Activity" -ni tanlang va " Keyingisi" tugmasini bosing .
To'ldiring Google Maps faoliyati formasini:
Tilni Java yoki Kotlin-ga o'rnating . Ikkala til ham Android uchun Maps SDK tomonidan to'liq qo'llab-quvvatlanadi. Kotlin haqida ko'proq bilish uchun Kotlin bilan Android dasturlarini ishlab chiqish bo'limiga qarang .
Minimal SDK- ni sinov qurilmasi qo'llab-quvvatlaydigan Android SDK versiyasiga o'rnating .
Finish tugmachasini bosing .
Loyihangizni yaratishni tugatgandan so'ng, Android Studio Gradle-ni ishga tushiradi va loyihani yaratadi. Bu biroz vaqt talab qilishi mumkin. Build tugagach, Android Studio ochiladi google_maps_api.xmlva MapsActivity fayllar. Faoliyatingiz boshqa nomga ega bo'lishi mumkin, ammo bu sizning sozlash paytida sozlangan bo'ladi.
Loyiha yaratish haqida ko'proq ma'lumot olish uchun Android loyihasini yaratish- ga qarang .
google_maps_api.xmlFayl Google Maps API kalitini olish va faylga qo'shib haqida ko'rsatmalarni o'z ichiga olgan. API kalitingizni faylga qo'shmang. Shunday qilib, sizning API kalitingiz xavfsizroq saqlanadi. Buning o'rniga keyingi qismdagi ko'rsatmalarga amal qiling.
XML tartib fayli
activity_maps.xmlFayli XML tartibi, fayl ilova UI tuzilishini belgilaydi. Fayl res/layoutkatalogda joylashgan . activity_maps.xmlFayli quyidagi elementlarni o'z ichiga oladi parchani e'lon:
tools:contextMapsActivityxaritalar faoliyati faylida aniqlangan fragmentning sukut bo'yicha faolligini o'rnatadi .
android:nameSupportMapFragmentxaritalar faoliyat faylida ishlatiladigan fragment turi bo'lgan fragmentning sinf nomini o'rnatadi .
XML layout fayli quyidagi kodni o'z ichiga oladi:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map"
tools:context=".MapsActivity"
android:name="com.google.android.gms.maps.SupportMapFragment" />
Do'stlaringiz bilan baham: |