Android 47: HTTP Status Codes (HTTP Status Kodları)

  1. İnformational (İnformasiya xarakterli status kodlar)
    • 100 Continue (Sorğunun uğurlu olduğu də davam edilə biləcəyini bildirir)
    • 101 Switching Protocol (Server aldığı “protokol dəyişdirmə” istəyini yerinə yetirəcəyini bildirir)
  2. Success (Uğurlu sorğu bildirən status kodları)
    • *200 OK (Sorğu uğurla tamamlanmış və nəticə qaytarılmışdır)
    • *201 Created (Sorğu uğurla tamamlanmış və nəticədə yeni mənbə yaradılmışdır)
    • 202 Accepted (Server sorğunu qəbul edib lakin hələ yerinə yetirməyib)
    • 203 Non Authoritative İnformation (Soru uğurludur lakin başqa mənbədən nəticə qaytarılır)
    • *204 No Content (Soruğu uğurludur amma nəticə yoxdur)
  3. Redirection (Yöndərilən sorğuları bildirən status kodalrı)
    • 300 Multiple Choices (Serverdə sorğuya uyğun bir çox variant olduğunu göstərir)
    • 301 Moved Permonetly (Bir mənbənin həmşəlik başqa ünvana köçürüldüyünü və həmin yeni ünvana yönləndirildiyini bildirir)
    • 302 Moved Temporalily (Bir mənbənin müvəqqəti olaraq başqa ünvana köçdüyünü bildirir, ilkin ünvanın dəyişmədiyini bildirir)
    • 303 See Other (Fərqli bir mənbəyə GET sorğusunun göndərilməsi lazım olduğunu bildirir)
    • *304 Non Modified (İstənilən mənbədə əvvəlkindən fərqli yeni bir informasiyanın olmadığını bildirir və informasiya göndərilmir)
  4. Client Error (Göndərilən sorğu xətasını bildirən status kodları)
    • *400 Bad request (Sorğu səhv göndərilib)
    • *401 Unoutharized (Sorğu üçün profilə ehtiyac var)
    • 402 Payment Request (Ödənişə ehtiyac var)
    • *403 Forbidden (Mənbənin qadağan olunduğunu bildirir)
    • *404 Not found (Sorğu göndərilən ünvanın tapılmadığını bildirir)
    • *409 Conflict (Sorğu daxilində ziddiyət var)
    • 410 Gone (Mənbə yoxdur)
  5. Server Error (Server xətalarını bildirən status kodalrı)
    • *500 İnternal Server Error (Serverdə bir problem yarandı və sorğu cavablandırılmadı)
    • 505 HTTP Version not supported (HTTP Protokol versiyası dəstəklənmir)

 

* (ulduz) işarəsi “TOP-10” sorğuları göstərir

Qeyd: Azərbaycan dilində olan yazıların (Hətta türkcə), çox böyük bir hissəsi tərcümə, kopyadır. Ona görə də özünüzü ingiliscə oxumağa öyrəşdirməyiniz, ingilis dili öyrənməyiniz xahiş olunur.

Bu yazını yazarkən tərcümə, kömək aldığım linklər aşağıdakılardır:
1. https://www.mediaclick.com.tr/blog/http-server-durum-hata-kodlari-ve-anlamlari
2. https://www.restapitutorial.com/httpstatuscodes.html

Advertisements

Android 46: Intentlə obyekt ötürmək

Xatırlayırsınızsa 27-ci yazımızda inentdən söz açmış, ardınca intent vasitəsiylə məlumat ötürmüş, almışdıq. Bu səfər isə intent vasitəsiylə obyekt ötürməyə çalışacağıq.

Gəlin “IntentObject” adında bir layihə başladaq, ardınca Student adlı sinif yaradaq. Bu bizim şagird üçün formalaşdırdığımız modelimiz olacaq. Daxilində şagiridn adı, soyadı, yaşı, oxuduğu sinif olacaq. Burada yaşı integer, digərləri String formada saxlanılacaq. Hamısı “private” olaraq qorunacaq, getter və setter (inkapsulasiya) istifadə ediləcək. Bura qədər olan hissəni özünüz həll edin. İndiyə qədər çox işləmişik. Bunu belə rahatlıqla edə bilmirsinizsə, bir problem var. Dostlar. Ciddən problem var. Yalandan üzdən oxuyub keçməyin. Nəyisə siz özünüz etməyi bacarmalısınız. Normal materialı bitirdik, xırdaçılıqlara keçirik. Siz artıq harasa staj üçün müraciət etmək yaşınızdasız, böyümək vaxtıdı. Bir iki aya iş üçün müraciət edəcəyik. Bərabər open source layihələr üzərində işləyəcəyik. Məni tək qoyacaqsınız? Olmaz helə. Hadi hadi. Yuxardakı linklərə keçid et bir də bax. Özün qurmağa çalış. Qura bilmirsən, araşdır, yenidən oxu, qur. Sonra sil. Heç bir yerə baxmadan yenidən qur. Sonra gəl yazının davamını oxu. Belə də, bəyənmirsən, boşdu, bu sayta göz at burdan öyrən. Əsas odu öyrən. Lap bilirsənsə, sən də yaz, izah etməyə çalış, blogunun linkini rəy yerinə qeyd et biz də gələk oxuyaq, biz də səndən öyrənək. Hamı hər şeyi bilir – ifadəsi doğru deyil. Mən “a”-nı bilirəm, sən “c”-ni, başqa biri “a”-nı məndən yaxşı bilir, “c”-ni səndən zəif. Yazsın, mən ondan “a”-nı öyrənim, sən də yaz ki, səndən “c”-ni öyrənsin. Söhbət açılmışkən, bu yaxınlarda kodrea komandası fəaliyyətə başladı, mediumdan tutmuş youtube-a qədər. Axtarış edin, tapın, onlardan öyrənin (mən də onarın materiallarını oxuyuram).

Qayıdaq mövzumuza. Burada Student sinfimiz Serializable sinfini implements etməlidir. Etdirin.

Burda diyanıb keçirik dizayna. Burada SecondActivity adlı activity yaradın. Xml-ində bir textView olsun (id vermək yadddan çıxamasın). Activity-də textView-i tanıdın (findViewById). Ardınca MainActivity-ə keçək. Onun xml səhifəsində bunlar olacaq: 4 ədəd editText, 4 ədəd textView, 1 ədəd Button. MainActivity-də isə editText və buttonları tanıdın. Yadınızdadı buttona klikləyərkən ediləcəklər proseslərini necə yazırdıq? Bilmirsizsə linkə klikləyib baxın. Həmin prosesi yerinə yetirdikdən sonra (Tamam, tamam kömək edim, setOnclickListener, ordanda new View.OnClickListener) Student sinfimizin obyektini yaradaq, editText-lərimizdəki məlumatları bir-bir obyektimizə ötürək. (Kodların hamısı sonda sizindir, özünüz etməyə çalışın.)

İndi intent yaradırıq. Ardınca putExtra ilə obyektimizi ötürürük, startActivity(intent)- yaddan çıxmasın. Bu hissə hazır. Keçirik SeconActivity-nin içinə. İntent yaradıb getIntent() edirik. İndi gələk əsas məsələyə. Normalda informasiya ötürəndə (ibtidai tip və ya String) necə idi? Onun üçün getExtra edirdik. Lakin indi getSerializableExtra() metodunu işlədcəyik. Ad tanış gəldi? Student sinfinə hansı sinfi implement etmişdik, bir bax gör? Aha, o. Əla.

Bir ədəd Student sinfinin obyektini təyin edək, intentin metodundan aldığımız obyekti buna mənimsədək (Student-ə casting edərək). Sonrada bunu ötürək textView-ə. Tadam: Bitdi.

Xeyir, bir ədəd String qaytaran toString() – metodu yazın SecondActivity daxilinə. İçdədə mətniniz ekranda necə görünsün, onu yazın. Və artıq bitdi.

Bu yazıdan da bu qədər. Kodlara burdan baxa bilərsiniz. Uğur ola!

 

 

Android 45: REST və SOAP

Əvvəl gəlin “REST nədir?” və “SOAP nədir?” suallarına qısa cavab verək, sonra aralarındakı fərqə baxarıq.

REST nədir?

REST (REpresentational State Transfer – Nümunə Status Transferi) HTTP ilə asan və sürətli şəkildə client-server əlaqəsi qura bildiyimiz strukturdur. REST üçün URL adresləri üzərindən əlaqələr qurulur, hər bir metod url adresi üzərindən fərqli olur. REST XML və ya JSON-dan istifadə edir (məlumat ötürmək üçün). Əsas da JSON-dan istifadə edilir. Çünki çox sürətli və azhəcimli olduğu üçün. [1]

SOAP nədir?

SOAP (Simple Object Access Protocol – Sadə Obyektə Giriş Protokolu) ən sadə formada internet üzərində az miqdarda məlumatları köçürmə protokoludur. SOAP mesajları XML formatında olub əsasən HTTP (Hyper Text Transfer Protocol) protokolundan (bəzən də TCP/IP) istifadə edilərək göndərilir. Burada diqqət edilməsi vacib olan nöqtələrdən biri SOAP bizi sadəcə XML formatından istifadə etməyə məcbur edir. [2]

REST və SOAP arasındakı fərqlər:

REST SOAP-dan daha sürətli və yüngüldür. [4] REST-i öyrənmək SOAP-a nəzərən daha sürətli və rahatdır. REST kiçik informasiyalar üçün istifadə edilir, SOAP böyük məlaumatlar üçün (Bu hissə necə də GET və POST-a oxşadı). [3] REST, SOAPdan daha az bant genişliyi və resurs tələb edir. [5]

Mənbələr:

[1] https://youtu.be/FlkGlHZZLTQ
[2] http://www.erenguvercin.com/2013/05/soap-ve-rest-mimarilerine-genel-baks.html
[3] http://kodkosesi.blogspot.com/2014/01/rest-vs-soap.html
[4] http://www.ateam-oracle.com/performance-study-rest-vs-soap-for-mobile-applications/
[5] https://www.javatpoint.com/soap-vs-rest-web-services
[6] https://blog.westmonroepartners.com/mobile-web-services-jsonrest-vs-xmlsoap/
[7] https://javapapers.com/web-service/rest-vs-soap/
[8] https://www.youtube.com/watch?v=pJxYARgvn7U
[9] https://stackoverflow.com/questions/6929180/rest-and-soap-webservice-in-android
[10] https://www.captechconsulting.com/blogs/soap-vs-rest-for-mobile-services

Android 44: Android Permissions

Android Permissions – deyərkən android tədbiqetmələrində istifadəçi tərəfindən verilən müəyyən icazələr nəzərdə tutulur. Misal üçün Düzəltdiyiniz tədbiqetməyə internet əlaqəsi lazımdırsa istifadəçidən internet istifadəsi üçün icazə almalısınız. Bunlara User-Permission deyilir, yəni istifadəçi icazələri.

Bu icazələr normal və təhlükəli olmaqla iki yerə ayrılır.

İnternte istifadəsi, Bluetooth istifadəsi, Alarm, Time zone (saat qurşağı) və bu kimi icazələr normal dərəcəli icazələrdi.

Kameradan istifadə, yaddaşdan istifadə, kalendardan istifadə, sms göndərmək və ya oxumaq kimi icazələr isə təhlükəli icazələr sayılır.

Təhlükəli deyərkən “Şəxsi məlumatların qorunması” baxımından təhlükəli. Bu kateoqriyalara buradan göz ata bilərsiniz.

Yaxşı, bu icazələri hara əlavə edəcəyik bəs? Əlbətdəki AndroidManifest səhifəmizə. Aşaıdakı şəkilə baxaq (şəklin mənbəsi):

<uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.RECORD_AUDIO"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.WAKE_LOCK"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Əlavə olaraq bubu yazıya göz ata, bu videonu izləyə bilərsiniz.

Android 43: ActionBar və ToolBar

Əslində yazının adına baxıb axtardığınız informasiyanı bu yazıda görməyəcəyiniz üçün üzr istəyirəm. Bu ümumiyyətlə yazı deyil.

ActionBar:

ToolBar ActionBar-ın biaz daha üstün versiyasıdır deyə bilərik. Material Design ilə (Android API 21, Android 5.0) ilə gəlib.

Bu mövzu haqqında geniş mənbələr var, əvvəl türkc sonra ingiliscə olmaqla linklər aşağıda:

[1] https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-201/action-bar-eklemek
[2] http://www.androidevreni.com/material-design-toolbar-kullanimi/
[3] https://canaltinova.com/blog/gule-gule-action-bar-hosgeldin-toolbar/
[4] https://blog.xamarin.com/android-tips-hello-toolbar-goodbye-action-bar/
[5] https://www.appcelerator.com/blog/2013/09/using-androids-actionbar/

[6] https://youtu.be/kmUGLURRPkI

Android 42: GET və POST

Bu yazımızdan etibarən, bir neçə yazı sırf bir-birinə oxşar 2 şeyin fərqləri üzərində olacaq. Bu yazımızda GET və POST əmirlərinin fərqinə baxacağıq.

Arasında fərqə baxmadan əvvəl deyək ki, GET və POST əmirləri SQL üçün olan əmirlərdir. Hər ikisi HTTP “request” metodlarıdır.

GET

  • Əlfəcin istifadə etmək mümkündür (Seçilmişlərə əlavə etmək)
  • Keş yaddaşda saxlanıla bilər
  • Browser tarixində qalır.
  • Həsass (çox vacib) məlumatlar üçün istifadə edilməməlidir.
  • 255 simvolluq bir uzunluq məhdudiyyəti var və ASCII cədvəlinə uyğun olmalıdır.
  • Sadəcə məluamt almaq üçün istifadə edilir

POST

  • Seçilmişlərə əlavə edilmir
  • Browser tarixində qalmır
  • Vacib məlumatlar üçün istifadə edilə bilər
  • 32000 simvola qədər uzadıla bilər, ASCII cədvəlinə uyğun olmasa da olar, yəni 0-1 kimi binary formada da ola bilər

Bir qədər qısa oldu amma aşağıdakı mənbələrər göz ataraq bu mövzu haqqında daha dərinləməsinə informasiya əldə edə bilərsiniz (edin)

[1] http://www.bahadirakin.com/get-ve-post-metodlari-ve-java/
[2] http://www.includekarabuk.com/kategoriler/genel/GET-ile-POST-Arasindaki-Fark.php
[3] https://www.w3schools.com/tags/ref_httpmethods.asp
[4] https://www.diffen.com/difference/GET-vs-POST-HTTP-Requests
[5] https://stackoverflow.com/questions/3477333/what-is-the-difference-between-post-and-get

Android 41: JSON HTTP Request

Bu yazımızda JSON Parse edəcəyimiz yazının yerinə birbaşa link qoyaraq parse etməyə çalışacağıq. Bunun üçün bəzi metodalrı yazmaq lazım olacaq. Başlayaq.

İlk öncə String jsonText var idi ha əvvəlki yazımızda, uzun bir mətin, həmin mətni silək, onun yerinə linki daxil edək.

Biz AsyncTask-dan istifadə edəcəyik. Bunun üçün yeni bir java faylı yaradırıq. Adını mən “AsyncGetPost” qoyacam. AsyncTask-ı isə extends edirik. Nəticə etibari ilə doInBackground metodunu implement etməyimiz lazım gəlir.

DoInBackground nədir? (Bura göz at)

Generate edərək onPreExecute və onPostExecute metodlarını da çağırırıq. Fikir versəz AsyncTaskın sağında “<>” ilə yazılmış üç parametr var. Bunlar nədir, ilki doInBackground-un aldığı argumentn tipi, ikincisi onProgressUpdate metodunun aldığı dəyər (biz o metoddan istifadə etməyəcəyik deyə Void olaraq saxlayırıq), üçüncüsü də onPostExecute-ün aldığı, doInBackground-un qaytardığı dəyərin tipini göstərir. Birinci v üçüncünü String, ikincini isə Void yazaq.

Keçək kodlara. Yazdığımız sinif üçün konstruktor metod yaratmalıyıq. Bunun üçün konstruktor medoumuzun qəbul edəcəyi Context dəyişənini qey edim konstruktor metodumuzu yazırıq

onPreExecute metodunda ProgressDialog yaradaq? Hansı ki doInBackground-da gedən proseslər bitənə dək ekranda mesaj yazılsın.

İndi isə bir ədəd HttpHandler adlı sinif yaradıram. Həmin sinifdə makeServiceCall adlı String qəbul edən və qaytaran metod yazaq.

Response adlı String dəyişəni yaradıb null edək. Ardınca try/catch bloku açaq. URL tipində url dəyişəni yaradıb metodun qəbul etdiyi url adresi ora ötürək. (Qırmızı xətt gələcək, üstünə basıb Exception-I add edin). Ardınca HttpUrlConnection yaradıb ona “GET” ötürək (setRequestMethod). Burada url.openConnection edəcəyik, Eception yarana bilər deyə, onu catch etməliyik (qırımızı xəttin üstünə basıb add edin).

Bura qədər olan vəziyyəti yuxardakı şəkildə görürsünüz. İndi HttpRequestimizdən bir InputStream qayıdır, bunu InputStream dəyişəninin içinə birbaşa ötürə bilməyəcəyik, bunun üçün BufferedInputStream metodu yaratmalıyıq ki, aldığımız Inputu Buffer edib istədiyimiz formaya salım. Belə deyək, API-a sorğu göndərirsiz, ordan sizə müəyyən mətin gəlir, hansı ki bu mətin 0 və 1-lərdən ibarət olur. Biz BufferetİnputStream metodunun içinə elə kodlar var ki, nəticə aldığımız bayt kodları öz başa düşdüyümüz dilə çevrilmiş olur. Həmin nəticəni InputStream-ə ötürməliyik. Həmin mətini isə başqa bir metodla Stringə çevirəcəyik. Başda yaratdığımız respose dəyişəninə mənimsədəcəyik.

İndi isə convertStreamToString metodunu yaradıb içini dolduraq. Əvvəlcə burad içiçə ötürmələr edəcəyik. Onun üçün birbaşa koda baxsaz hansı hazır metodlardan istfiadə etdiyimizi görəcəksiniz.

Ardınca StringBuilder yaradırıq.

“line” adlı String dəyişəni yaradıb try/catch blokunun içində while döngüsü yazırıq. Döngünün şərti belədir: BufferedReader-dən aldığlız informasiyanın “readLine” ilə sətrini öz String-imiziə ötürürük, onun da null (boş) olmamasın yoxlayırıq, null olmadığı vəziyyətdə StringBuilder-ə append edib əlavə də aşağı sətrə keçirik. Sonda aldığımız mətin formasında JSON-u bizə qaytarsın. Kod aşağıdakı kimidir:

Bu hissə tamamdır. İndi qayıdaq AsyncGetPost sinfimizə orada doInBackgorund-da HttpHander obyektini yaradaq makeServiceCall metodunu çağıraq. Burada həmin metoda url adresi ötürmək lazımdı. Qayıdırq MainActivitimizdə url olan dəyişənimizi ordan kəsib həmin bu sinfimizədəki həmin metodumuza local dəyişən kimi yapışdırırıq. Onun da adını jsonText yox jsonUrl qoyuram. Orda həmin handlerdn çağırdığım metodun bizə qaytardığı json mətnini də jsonResult adlı stringə mənimsədib return edirəm. Vəyət aşağıdakı kimidir:

İndi AsyncTask daxilində Json parse etmək üçün jsonParse metodu yazıram, hansı ki siz bunu əvvəlki yazımızda etmişdiniz.

PostExecute metodunun aldığı dəyişəni həmin jsonParse metoduna ötürürəm.

Link-ə getdik, URL-ə çevirdik, sorğu göndərib məlumatı aldıq, alınan məlumatı (byte code) əvvəl başa düşdüyümüz dilə, sonra da normal JSON formasına saldıq. Ardından həmin mətni parse edib arrayListə doldurduq. İndi qaldı həmin arrayList-i ListView-ə ötürmək.

MainActivity-də AsyncGetPost üçün obyekt yaradıb həmin obyekt üçün execute() metodunu çağıraq.

Əlbətdə ki bütün bu proseslər internet üzərindən olduğu üçün internet icazəsi də əlavə edirik. AndroidManifest-ə gedib əlavə edirik:

Indi onPreExecute içində yatadığım ProgressDialog obyektini glob etdim ki JSON parse etdikdən sonra həmin dialog pəncərəsi balansın. Bunun üçün də onPostExecute metodunda jsonParse-dan sonra progressDialog.dismiss() metodun çağırdım.

Bir ədəd də Toast mesaj çıxardaq ekrana ki bilək JSON Parse əməliyyatı uğura tamamlanıb ya yox. Bunun üçün onPostExecute-də progressDialog-dan əvvəl Toast mesaj çıxarırıq.

Və Run edək.

Belə. HttpHandlerAysncGetPost siniflərini sizlə paylaşacam. Ev tapşırığınız, aldığımız informasiyaları listView-ə ötürün. Uğur ola!