Site Loader

Retrofit ve Slim Framework Yardımıyla Login İşlemi

Merhaba, bu yazımda sizlere Restful Web Service ile uygulamamızda nasıl etkin bir login activitysi oluşturacağımızdan bahsedeceğim. Öncelikle işin web service kısmını halledelim. Bunun için Composerı kuralım. Composer güncel bir şekilde kütüphanelerimizi kullanmamızı sağlar. Bununla ilgili detaylı bir yazıyı da yakın tarihlerde sizlere sunacağım. Şimdi işlemlerimize geçelim. Composerımızı şuradan indirelim. Kurulumumuzu gerçekleştirdikten sonra Slim Frameworku indirmek için composer.json dosyasını oluşturmamız gerekiyor. İçeriği ise şu şekilde olmalı. Ben Slim 2.0′ ı kullanacağım. {
"require": {
"slim/slim": "~2.0",
}
}
Şimdi ise composerımızı çalıştırmamız gerekmekte. Bunun için Komut Satırında proje dizinine gidilerek şu komutu çalıştırmalıyız. composer install “vendor” isimli klasörümüz oluşmuş olmalı.Bu şekilde kullanmak istediğimiz frameworkleri projemize ekleyebiliriz.
require 'vendor/autoload.php'
$app = new \Slim\Slim();
Yukarıda görülen kodu da proje sayfamıza eklersek vendor klasörünün içindeki dosyalar da kullanılabilir hale gelecektir. İşin bu kısımlarını kolayca hallettikten sonra işin php tarafınıza geçebiliriz. Öncelikle databaseimizi kullanabilmek için bilgilerimizi ekleyelim. Veriyi elde edeceğimiz siteyi, kullanıcı adımızı, şifremizi ve veritabanı adımızı ekleyelim.
{
function getDb()
{
return $db = new MysqliDb ('example.com', 'name_user', '123456', 'name_db');
}
Daha sonra ise index sayfasına gönderdiğimiz parametreler yardımıyla bir sonuç döndürmemiz gerekiyor. “example.com/index.php/api?email=kullaniciEmaili&sifre=kullaniciSifresi” iki değer döndürmeli. “email” ve “sifre” ikilisi yardımlarıyla yaptığımız sorguların doğru ise 1 değilse 0 döndürmesi gerekmektedir. 1 döndürürse status success, 0 döndürürse failed ifadesini JSON tipinde ekrana basıyoruz. {
$app->get("/api", function () use ($app) {
$request = $app->request();
$email= $request->get('email');
$sifre = $request->get('sifre');
$db = getDb();
$db->where ('email', $email);
$db->where ('sifre', $sifre);
$result = $db->get('tabloAdi');

if (sizeof($result) == 0) {
echo '{"status":"failed"}';
} else {

echo '{"status":"success"}';
}

});

$app->run();
Bu kodlarımızı çalıştırdıktan sonra karşımıza gelen ekran şu şekilde olmalı. Browserların JSON eklentileri kullanarak, karmaşık JSON kodlarınızı browserlarda bu şekilde görüntüleyebilirsiniz. Google Chrome’ da JSON View, JSON Viewer gibi eklentileri kullanabilirsiniz. İşin Android kısmına geçelim şimdi de.Öncelikle build.gradle’ in dependencies kısmına aşağıdaki kodları ekleyerek retrofit2 ve okhttp3 kütüphanelerini kullanılabilir hale getirelim. Ardından ise build.gradle’ ı senkronize etmeliyiz.
{ compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
Daha sonra “api?email=kullaniciEmaili&sifre=kullaniciSifresi” kısmının döndüreceği JSON tipindeki veriyi kullanabilmemiz için bir model ve interface oluşturmalıyız. Model sınıfımız aşağıdaki gibi olmalıdır.
{
private String status;
public ModelClass(String status) {
this.status = status;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
İnterface ise şöyle olmalıdır. {
public interface JSONApi{
@GET("deneme/index.php/api")
Call servisLogin(@Query("email") String email, @Query("sifre") String sifre);
}
Interfaceimizi de oluşturduktan sonra login işlemini gerçekleştirmeliyiz. Öncelikle gerekli tanımlamaları yapmalıyız. {
private EditText email, sifre;
private Button button;
public static Retrofit retrofit = null;
static OkHttpClient.Builder httpClient;
public static final String URL = "http://www.example.com/";
URL’ imizi belirttikten sonra onCreate methodumuzu doldurmalıyız. Layoutumuzda 2 adet edittext ve 1 adet button bulunuyor. Edittextlerimizin idleri edittextEmailId ve edittextPasswordId, butonumuzun ise buttonGiris. Butonumuzu tıkladığımız zaman yapılacak işlemleri de setOnClickListener kısmına yazıyoruz.
email = (EditText) findViewById(R.id.edittextEmailId);
sifre = (EditText) findViewById(R.id.edittextPasswordId);
buton= (Button) findViewById(R.id.buttonGiris);
httpClient = new OkHttpClient.Builder();
retrofit = new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient.build())
.build();
button.setOnClickListener(new View.OnClickListener() {
JSONApi service = retrofit.create(JSONApi.class);
@Override
public void onClick(View v) {
Call mService = service.servisLogin(email.getText().toString(), sifre.getText().toString());
mService.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
ModelClass mLoginObject = response.body();
String returnedResponse = mLoginObject.getStatus();
if (returnedResponse.toString().equals("success")) {
Intent intent=new Intent(MainActivity.this, Profil.class);
startActivity(intent);
}
email ve sifre doğru ise MainActivity sayfasından Profil sayfasına yönlendirme yapıyoruz. else if (returnedResponse.trim().equals("failed")) {
Toast.makeText(MainActivity.this, "Yanlış şifre ve email kombinasyonu. Düzelterek tekrar deneyiniz.", Toast.LENGTH_LONG).show();
}
}
email ve şifre ifadesi yanlış ise Toast mesaj basıyoruz. @Override
public void onFailure(Call call, Throwable t) {
Toast.makeText(MainActivity.this, "Internet baglantnizi kontrol ediniz", Toast.LENGTH_LONG).show();
}
}
);
}
}
);
}
onFailure methodu ise internetin kullanılamadığı durumlarda çalışan methottur. Umarım yardımcı olmuşumdur. Sağlıcakla kalın.

Android.Hybrid,Native


# Back

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir