Good Contents Are Everywhere, But Here, We Deliver The Best of The Best.Please Hold on!
Data is Loading...
Your address will show here 12 34 56 78
Android, Blog
 

Sanırım asıl istediğimiz yere henüz ulaşabildik, bunun sebebi tane tane, bilene bilmeyene, herkese anlatabilmek. Evet, belli seviyenin üstünde isen biraz fazla uzattığımı düşünebilirsin, lütfen düşünme, herkes sen kadar gelişmiş değil, üzgünüm ?

Birde buraya bir anda ışınlandı isen Scotty, alttakileri öncelik vermeni tavsiye ederim.

Retrofit 2.x ile REST Api Yönetimi #1
Retrofit 2.x ile REST Api Yönetimi #2
Retrofit 2.x ile REST Api Yönetimi #3

Neyse, ufak kişisel bir fikir ve önerinin ardından elimizde neler var bakalım.

- Veritabanı
- Api
- CRUD Web App
- Android App (Henüz boş, sadece bir Sorun sınıfımız var.)

Şimdi Retrofit 2.x kısmına geçebiliriz ? Dını dını dını…

Eklediğimiz kütüphanelerden A, Retrofit’e aitti bu arada ve oluşan JSON verisini çekebilmemiz için bir converter ihtiyacımız olacak, bu da B kütüphanesi ile sağlayacağımız durum.

Adım 4.1 — Yararlı Kontroller

Ben genelde asıl isterlerin ne ile çalışacağına dikkat ederek önce bunlara ait gereklerin yeterli olup olmadığını kontrol edecek metodları oluşturuyorum.

Bunun için diğer paketlerimizin yanına yeni bir paket ekleyelim ve bu klasörün adını utils olarak belirtelim, bu benim tarzım, faydalı kontroller olarak düşünebiliriz. Ardından utils klasörümüze sağ tıklayarak içerisine yeni bir class yaratalım ve “InternetConnection” olarak adlandıralım. Çünkü bize internet bağlantısı lazım.

package com.can.anyma.apimanagementapp.utils;

import android.content.Context;
import android.net.ConnectivityManager;
import android.support.annotation.NonNull;

/**
* Created by anyma on 16.05.2017.
*/

public class InternetConnection {
/**
* Check Internet connection
*/
public static boolean checkConnection(@NonNull Context context) {
return ((ConnectivityManager) context.getSystemService
(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo() != null;
}
}

Kısa vadede şimdilik bu işimizi görecektir, fakat ileride başka yeterlilikleride bu klasör altına ekleyebiliriz.

Adım 4.2— Api’ye Bağlanma

Api’ni istediğimiz kısmına bağlanmak için api>service paketimize bir Interface eklememiz gerekmekte, bunuda service paketine sağ tıkladıktan sonra New>Class seçeneğini seçerek yapacağız. Kind kısmından ise yaratacağımız şeyi Interface olarak belirteceğiz.

 

Geldik Retrofit ile ilk ilişki kuracağımız yere. Burada import kısımları otomatik gelecektir fakat gelmez ise , model klasörümüzdeki Sorun classını importlamakta önemli.

Bu kod bizim Api’ye POST metodu ile veri göndereceğimizi ve birazdan RetroClient içerisinde URL’sini belirtecek olduğumuz Api’nin sonuna URL/sorunlar şeklinde erişebileceğini belirtmekte. Api’nizin birçok sayfası olabilir değil mi? Bu bir sayfasına erişmemizi sağlıyor işte. Ve içerisine Body olarak Sorun tipinde bir sorun objesi alıyor. Bu sorun objesini MainActivity’den göndereceğiz. Bu metoda createSorun adını vermişiz.

package com.can.anyma.apimanagementapp.api.service;
import com.can.anyma.apimanagementapp.api.model.Sorun;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
/**
* Created by anyma on 14.05.2017.
*/
public interface ApiService{
    @POST("sorunlar")
Call<Sorun> createSorun(@Body Sorun sorun);
}

Adım 4.3 — Client Oluşturma

Şimdi biz Api’ye bağlandığımızda ondan bir istekte bulunacağız, dolayısıyla bir istemci yani client’a sahip olmalıyız.

Bunun için api>service paketimize bir RetroClient class’ı eklemek.

URL kısmına kendi URL’nizi yazmayı unutmayın ve unutmayın ki Client’te URL/sorunlar şeklinde belirttik. Yani şu anda Post URL/api/sorunlar dizinine gidecek.

package com.can.anyma.apimanagementapp.retrofit.api;

import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

/**
* Created by anyma on 16.05.2017.
*/

public class RetroClient {

/********
* URLS
*******/
private static final String ROOT_URL = "http://URL/api/";

/**
* Get Retrofit Instance
*/
private static Retrofit getRetrofitInstance() {
return new Retrofit.Builder()
.baseUrl(ROOT_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}

/**
* Get API Service
*
*
@return API Service
*/
public static ApiService getApiService() {
return getRetrofitInstance().create(ApiService.class);
}
}

Adım 4.4 — Api ile Veritabanı’na Veri Gönderme

MainActivity içerisinde fab_menu_1 bizim Veri Ekle butonumuz idi. Onu aşağıdaki şekilde düzenleyerek bir sorun objesi yaratalım ve onu yine MainActivity içerisinde yaratacağımız createRequest methoduna gönderelim.

fab_menu_1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

Sorun sorun = new Sorun(
yetkili.getText().toString(),
bolge.getText().toString(),
aciklama.getText().toString()
);


createRequest(sorun);
}
});

createRequest metodu ise aşağıdaki güzellik.

private void createRequest(final Sorun sorun) {

/**
* Checking Internet Connection
*/
if (InternetConnection.checkConnection(getApplicationContext())) {
final ProgressDialog dialog;
/**
* Progress Dialog for User Interaction
*/
dialog = new ProgressDialog(CreateSorun.this);
dialog.setTitle("Hey Wait Please...");
dialog.setMessage("I am getting your JSON");
dialog.show();

//Creating an object of our api interface
ApiService api = RetroClient.getApiService();

/**
* Calling JSON
*/
Call<Sorun> call = api.createSorun(sorun);

final Sorun tempSorun = sorun;

/**
* Enqueue Callback will be call when get response...
*/

call.enqueue(new Callback<Sorun>() {
@Override
public void onResponse(Call<Sorun> call, Response<Sorun> response) {
//Dismiss Dialog
dialog.dismiss();

if(response.isSuccessful()) {
/**
* Got Successfully
*/
//uploadFile();

Intent intent = new Intent(CreateSorun.this, MainActivity.class);
startActivity(intent);

} else {
Snackbar.make(parentView, "Something went wrong.", Snackbar.LENGTH_LONG).show();
}

}

@Override
public void onFailure(Call<Sorun> call, Throwable t) {
Toast.makeText(CreateSorun.this, "Bir şeyler yanlış gitti :(", Toast.LENGTH_SHORT).show();
}
});

} else {
Snackbar.make(parentView, "Internet Connection Not Available.", Snackbar.LENGTH_LONG).show();
}

}

Bitti bu arada ?? Şimdi Visual Studio ile önce serverını aktif hale getir ve sonra Android Uygulamandan bir veri ekle ve SorunTable sayfana bak tarayıcıdan.

  • Karşılaşacağın bir sorun var, Genymotion ile localhost arasından iletişim kurmak zor ve telefonunada atarsan localhost diye bir şey mantıklı olmuyor, localler farklı ?
  • Visual Studio için Conveyor eklentisi localhost’u ip’ye çevirmeni sağlıyor. Yüklersen bu sorunu aşmış olacaksın. Tools > Exentions and Updates kısmında ve Enable etmen gerekebilir projeyi her başlattığında.
Yeni adresini Android Uygulamanda değiştirmeyi unutma!
 

Sonuç ?

 

BAM!?

Ben kendimdeki uygulamayı biraz daha geliştirdim ama, ürünün tam versiyonu aşağıdaki github dosyalarında. Senin isteğine göre adım adım veri çekme, düzenleme gibi adımlarıda anlatabilirim. Hatta istersen bu projeyi Microsoft Azure ‘a yükleyerek canlı hale getirebiliriz. ?

Web Api

Api Management App

Aşağıdaki android uygulaması veri ekleyebiliyor, verileri belirli bir kalıpta listeleyebiliyor, Azure Blob’larına resim yükleyebiliyor falan. ?

Beni takip etmeyi unutma, çekinmeden yazmayıda.

www.anymaa.com

0