22 Ağustos 2016 Pazartesi

Android Retrofit Kullanımı

     Retrofit rest tabanlı yazılmış servisler "RESTful" için kullanılan , eski yöntemlere göre aşırı kolay bir kütüphanedir . Temel mantık sunucu elinde bir data bulundurur ve servisle bunu sunar . Mobil tarafında ise bu servisten retrofit yardımıyla bu data alınır .Örnek olarak linkte sunulmuş hazır bir servis örneğini görebilirsinis ."https://api.github.com/users/gurkankesgin"



Bu datayı mobil taraflı yakalamak için ise 3 temel adımı uygulamanız gerekiyor .

1)  Datayı mobil tarafta map edecek bir sınıf oluşturmak . "Ben burada test amaçlı olduğu için sadece birkaç parametre ekledim , psikopat bir back-endci yoksa ve gereksiz yere parametre göndermiyorsa genelde hepsi eklenir :)"
public class User {

    private String name;
    private String avatar_url;
    private boolean site_admin;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAvatar_url() {
        return avatar_url;
    }

    public void setAvatar_url(String avatar_url) {
        this.avatar_url = avatar_url;
    }

    public boolean isSite_admin() {
        return site_admin;
    }

    public void setSite_admin(boolean site_admin) {
        this.site_admin = site_admin;
    }


    @Override
    public String toString() {
        return "User{" +
                ", name='" + name + '\'' +
                ", avatar_url='" + avatar_url + '\'' +
                ", site_admin=" + site_admin +
                '}';
    }
}





2) Servise çıkılacak olan uzantılar için bir interface oluşturulur . "Buradaki @Path ; url in sonundaki kısmın değişken olduğu ve verilen değere göre farklı bir nesne döndürdüğünü belirmektedir . Yani username yerine kendi adınızı gönderirseniz kendi bilgilerinizi çekebilirsiniz ."
public interface ApiInterface {

    @GET("/users/{username}")
    public void getUserbyName(@Path("username") String username, Callback userCallback);

}



3) Interface in kullanacağı adapter oluşturulur ve kendisine servisler için çıkacağımız base url verilir .
Ardından bu adapter kullanılarak interface in intance ı alınır .
 RestAdapter resrAdapter = new RestAdapter.Builder().setEndpoint("https://api.github.com").build();
 ApiInterface apiInterface = radapter.create(ApiInterface.class);



ve artık dataya erişebilirsiniz . apiInterface intance ı ile kullanmak istediğiniz servisi kullanabilir çekmek istediğiniz datayı çekebilirsiniz . Şu an tek servisimiz olduğundan mecburen kendisini kullanıyoruz :)  Bizden bir string ve bir callback isteyen methoda ilgili parametreleri gönderiyoruz .
  apiInterface.getUserbyName("gurkankesgin", new Callback() {
            @Override
            public void success(User user, Response response) {
                Toast.makeText(MainActivity.this, user.toString(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void failure(RetrofitError error) {

            }
        });
Callback te görüldüğü üzere iki method var biri success , başarılı bir şekilde sonuç geldiğinde bu method a düşer içerisinde  yakalamak isteğimiz user nesnesi ile; diğeri ise failure , adından da anlaşılcağı gibi bir yerlerde hata olduğunu gösteririr ""error.getMessage() ile hata mesajını bu methodda yazdırabilirsiniz .

 Kodun çıktısı da aşağıdaki gibidir .




  • tabi bunları yazarken internet iznini vermeyi unutmuyoruz . 
"<uses-permission android:name="android.permission.INTERNET"/>"

kaynak kodlara adresten erişebilirsiniz .Link 1