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 :)"
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 ."
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 .
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 .
Kodun çıktısı da aşağıdaki gibidir .
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 .
kaynak kodlara adresten erişebilirsiniz .Link 1