🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / Android / retrofit

 

2-) retrofitte timeout süresi ayarlama -> ServiceGenerator.java -> son hali bunu kullan

 

package com.webpos.ramazan.rmos.rmossay.WebServis;
import com.webpos.ramazan.rmos.rmossay.MainActivity;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class ServiceGenerator {
    
public static String baseUrl = MainActivity.MyWebServis;
    
public static Retrofit retrofit;
    
private static Retrofit.Builder builder = new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(GsonConverterFactory.create());
    
private static OkHttpClient.Builder httpClient = new OkHttpClient().newBuilder();
    
public static <S> S createService(Class<S> serviceClass) {

        
httpClient.connectTimeout(30, TimeUnit.SECONDS);
        
httpClient.readTimeout(30, TimeUnit.SECONDS);
        
httpClient.writeTimeout(30, TimeUnit.SECONDS);

        
builder.client(httpClient.build());
        
retrofit = builder.build();
        
return retrofit.create(serviceClass);
    }
}

 

 

1-) Android -  retrofit

 

link aşağıdadır istersen linkten 
bakabilirsin

http://abdullahbalta.com/android-retrofit-ve-glide-kutuphaneleri-kullanimi/

 



 



Formun Üstü





Formun Altı



ANA 
SAYFA

Android: Retrofit 2 ve Glide Kütüphaneleri Kullanımı

07 SEPTEMBER 2016 on androidkütüphanelibraryrecyclerviewkullanımıretrofitglideimageinternet 0 Comments

Merhaba arkadaşlar, askerlik 
dönüşünden sonra yeni konularımızla tekrar Android derslerine devam ediyorum. 
Bu uygulamamızda bir network kütüphanesi olan Retrofit
 ve 
görüntü kütüphanesi olan Glide
 kütüphanesini kullanacağız. Şimdi 
kısaca bu kütüphanelerin özelliklerine bakarak yazımıza devam edelim.

Retrofit 2 Kütüphanesi

İlk başlarda http sorguları için 
AsyncTask kullanıyorduk. Bu yöntem nispeten yavaş çalışıyordu ve çoklu 
sorgularda ise daha karmaşık bir yapı ortaya çıkarıyordu. Volley kütüphanesi 
ile AsyncTask kullanma zorunluluğunu ortadan kaldırmıştık. Çünkü, Volley http 
sorgularını varsayılan olarak asekron olarak yapabiliyordu. Bende bu konu 
hakkında daha önce bir yazı yazmıştım.

Android Volley Kütüphanesi kullanımı için tıklayınız.

Retrofit kütüphanesi ise kullanım 
kolaylığı, performans ve gelişmiş özellikleri bakımından Volley için iyi bir 
alternatif sağlar.
Retrofit 2 ise Retrofit kütüphanesinin daha gelişmişidir. 
Retrofit 2 ile OkHttp, Okio gibi kütüphanelere ihtiyacımız kalmıyor. Ayrıca, 
Retrofit 2 ile gelen Call sınıfı sayesinde basitçe 
request/response sınıfları oluşturabiliyoruz.

Glide Kütüphanesi

Glide kütüphanesi ise medya yükleme 
kütüphanesidir. İnternette bulunan her türlü resim ve video formatlarını 
uygulamamızda görüntülemeye yarar. Bu kütüphanenin bazı özelliklerinden 
bahsedecek olursak aşağıdaki şekilde bir liste çıkarabiliriz.

·         
Video, resim 
ve animasyonlu gif formatlarını destekler.

·         
Medya 
yüklenmeden önce geçici bir resim eklenebilir.

·         
Resim 
yüklenmeden önce blurlu bir şekilde görüntülenebilir.

·         
Çeşitli 
resim dönüşümleri yapılabilinir.

·         
Hafıza ve 
disk cacheleme işlemleri yapılabilinir.

GitHub 
-
RetrofitGlideExample

Kütüphanelerin Projeye Eklenmesi

Bu uygulamamızda bir Json 
datasından
 çektiğimiz resim ve textleri, recyclerview 
içerisinde göstereceğiz. Daha önce bu konseptte uygulamalar yapmıştık.

Bunun için build.gradle dosyasına 
aşağıdaki şekilde dependencileri eklemeniz gerekiyor.



    
compile 
'com.github.bumptech.glide:glide:3.7.0'



  
  compile 
'com.squareup.retrofit2:retrofit:2.1.0'



    
compile 
'com.squareup.retrofit2:converter-gson:2.0.2'



    
compile 
'com.google.code.gson:gson:2.7'



    
compile 
'com.android.support:recyclerview-v7:23.4.0'



Buradaki sürümler sizin 
bulduklarınızdan eski olabilir. Bu şekilde eklemek yerine 
File > 
Project Structure
 penceresinden Dependencies tabına 
gelerek + butonuna tıklayarak da kütüphaneleri ekleyebilirsiniz.

Android Studio Kütüphane Ekleme

Kütüphaneleri ekledikten sonra 
AndroidManifest'ten internet iznini vermeyi unutmayınız.

Android Gson Model

Bu projede kullanacağımız json 
verisini incelediğinizde en dışta bir 
JsonArray olduğunu göreceksiniz. 
Bu JsonArray'i içinde ise 
JsonObject'leri bulunmaktadır. Şimdi bu 
json verimizi kullanarak bir model sınıfı oluşturalım. Bu model sınıfı 
oluştururken online bir araç
kullanacağız. Bu linkteki json 
verimizi kopyalayıp, buradaki
 online araca yapıştırıyoruz. 
Ayarları aşağıdaki şekilde girdikten sonra 
Preview tıklayarak. Movie.java model 
sınıfımızı oluşturuyoruz.

Json Verisi ile Gson Sınıfı Oluşturma



package 
com.abdullahbalta.
retrofitglideexample.model;



 



import com.google.gson.annotations.Expose;  



import 
com.google.gson.annotations.SerializedName;



 



public class Movie {



 



    
@SerializedName("name")



    
@Expose



    
public String name;



    
@SerializedName("url")



    
@Expose



    
public Url url;



    
@SerializedName("timestamp")



    
@Expose



    
public String timestamp;



 



    
public class Url {



 



        @SerializedName("small")



        @Expose



        public String small;



        @SerializedName("medium")



        @Expose



        public String medium;



        @SerializedName("large")



        @Expose



        public String large;



 



    
}



}



Yukarıda bazı GSON annotationları 
(kısaltmaları) kullanılmıştır. Kısaca bunları açıklamak gerekirse 
@SerializedName kısaltması 
Json anahtarını parametre alarak bunu serialize olduğunu söyler. Bu kısaltmayı 
kullandığımız takdir de değişken isimlerini istediğimiz gibi 
değiştirebiliriz. 
@Expose kısaltması ise bize altından bulunan 
değişkenin serialize ya da deserialize yapılabildiğini gösterir. 
@Expose(deserialize 
= false)
 ya da @Expose(serialize = false, deserialize = false) kullanım 
şekilleri ile serialize ya da deserialize özelliklerini kapatabiliriz.

Retrofit Yardımcı Sınıflar

Model sınıfımızı oluşturduktan sonra 
bir adet sınıf ve bir adet interface oluşturuyoruz. Öncelikle 
RetroClient.java sınıfından 
bahsedeyim. Burada amacımız static bir
retrofit nesnesi oluşturup. Bu nesneye 
ana adresimizi tanımlayıp daha sonra kullanmak üzere build ediyoruz.



package 
com.abdullahbalta.
retrofitglideexample.interfaces;



 



 



import retrofit2.converter.gson.GsonConverterFactory;  



import retrofit2.Retrofit;



 



/**



 * Created by asus on 6.09.2016.



 */



public class RetroClient {  



    
public static final String BASE_URL = "http://api.androidhive.info";



    
private static Retrofit retrofitnull;



 



 



  
  
public static 
Retrofit getClient() {



        if (retrofit==null) {



            retrofitnew 
Retrofit.Builder()



                    .baseUrl(BASE_URL)



                    
.addConverterFactory(GsonConverterFactory.create())



                    .build();



        }



        return retrofit;



    
}



}



Bu kısımdan sonra istediğimiz http 
çağrılarını yapabilmemize yardımcı olan bir 
RetroInterface.java interface'ini 
oluşturuyoruz. Aşağıda gördüğünüz üzere bir 
@GETannotation'ı 
ve 
Call tipinde Movie[] parametresi alan bir 
metot görüyorsunuz. Öncelikle @GET annotation'ı içerisine bakacak olursak bir 
path görüyoruz. Bu demek oluyor ki, daha önce oluşturduğumuz url'in ilgili 
path'ine bir GET çağrısı yapıyoruz demek. Alttaki metot ise bize bir JsonArray 
tipinde bir nesne döneceğini gösteriyor. Bu yüzden tanımlamamızda [] köşeli 
parantez kullanıyoruz.



package 
com.abdullahbalta.
retrofitglideexample.interfaces;



 



import 
com.abdullahbalta.
retrofitglideexample.model.Movie;



 



import retrofit2.Call;  



import retrofit2.http.GET;



 



/**



 * Created by asus on 6.09.2016.



 */



public interface RetroInterface {  



    
@GET("/json/glide.json")



    
Call<Movie[]> getJsonValues();



}



Burada Retrofit kullanarak basit bir 
GET sorgusu nasıl yapılır bunu görmüş olduk. Tabi tüm http sorguları bu kadar 
basit olmak zorunda değil çeşitli parametreler ve header değerleri girerek POST 
sorgusu da yapmak mümkündür. Bunun için yazının başında resmi adresini verdiğim 
Retrofit sayfasını inceleyebilirsiniz.

Adapter ve Activity Sınıfları

Verilerimizi çekip recyclerview da 
göstereceğimiz için bir tane recyclerview adapteri oluşturuyoruz. Bu projede 
her bir hücrede bir tane thumbnail resmi ve 2 adet textview kullandığımız 
için 
MovieAdapter.java aşağıdaki gibi oluşturuyorum.



package com.abdullahbalta.retrofitglideexample.adapter;



 



import 
android.content.Context;  



import 
android.support.v7.widget.RecyclerView;  



import 
android.view.LayoutInflater;  



import 
android.view.View;  



import 
android.view.ViewGroup;  



import 
android.widget.ImageView;  



import 
android.widget.TextView;



 



import 
com.abdullahbalta.
retrofitglideexample.R;  



import 
com.abdullahbalta.
retrofitglideexample.model.Movie;  



import 
com.bumptech.glide.Glide;  



import 
com.bumptech.glide.load.engine.DiskCacheStrategy;



 



import java.util.List;



 



/**



 * Created by asus on 7.09.2016.



 */



public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.MovieViewHolder> {



 



    
private List<Movie> movies;



    
private int rowLayout;



    
private Context context;



 



    
public static class MovieViewHolder extends RecyclerView.ViewHolder {



        ImageView thumbnail;



        TextView movieTitle;



        TextView date;



 



 



        public MovieViewHolder(View v) {



            super(v);



            thumbnail = (ImageView) 
v.findViewById(R.id.list_image);



            movieTitle = (TextView) 
v.findViewById(R.id.title);



            date = (TextView) 
v.findViewById(R.id.time_text);



        }



    
}



 



 



    
public MovieAdapter(List<Movie> movies, int rowLayout, Context context) {



        this.movies = movies;



        this.rowLayout = rowLayout;



        this.context = context;



    
}



 



    
@Override



    
public MovieAdapter.MovieViewHolder onCreateViewHolder(ViewGroup parent, int 
viewType) {



        View view = 
LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, 
false);



        return new MovieViewHolder(view);



    
}



 



    
@Override



    
public void onBindViewHolder(MovieAdapter.MovieViewHolder 
holder, 
int position) {



        holder.movieTitle.setText(movies.get(position).name);



        
holder.date.setText(movies.get(position).timestamp);



        
Glide.with(context).load(movies.get(position).url.medium)



                .thumbnail(0.5f)



                .crossFade()



                .diskCacheStrategy(DiskCacheStrategy.ALL)



                .into(holder.thumbnail);



    
}



 



    
@Override



    
public int getItemCount() {



        return movies.size();



    
}



}



Bu yazının diğer konusu olan Glide 
kütüphanesinin kullanımı ise burada karşımıza çıkıyor. Aşağıdaki şekilde Glide 
kütüphanesini kullanarak thumbnail resimlerini hızlı bir şekilde çekip, 
imageview'a eklemek mümkündür.



Glide.with(context).load(movies.get(position).url.medium)  



                .thumbnail(0.5f)



                .crossFade()



                
.diskCacheStrategy(DiskCacheStrategy.ALL)



                .into(holder.thumbnail);



MainActivity.java da ise basit bir Retrofit 
sorgusu yapıyoruz. Dönen veriyi ise recyclerview da gösteriyoruz. Aşağıda da 
görüldüğü üzere hiçbir şekilde parse işlemi vs ile uğraşmamıza gerek kalmıyor. 
Benim burda tek yaptığım dönen JsonArray'i listeye çevirmem bu kısım biraz 
performans kaybına sebep olabilir. İsterseniz hiç listeye çevirmeden de düzgün 
bir şekilde çalıştırabilirsiniz.



package 
com.abdullahbalta.
retrofitglideexample;



 



import 
android.support.v7.app.AppCompatActivity;  



import 
android.os.Bundle;  



import 
android.support.v7.widget.LinearLayoutManager;  



import android.support.v7.widget.RecyclerView;  



import android.util.Log;



 



import 
com.abdullahbalta.
retrofitglideexample.adapter.MovieAdapter;  



import 
com.abdullahbalta.
retrofitglideexample.interfaces.RetroClient;  



import 
com.abdullahbalta.
retrofitglideexample.interfaces.RetroInterface;  



import 
com.abdullahbalta.
retrofitglideexample.model.Movie;



 



import 
java.util.ArrayList;  



import java.util.Arrays;  



import java.util.List;



 



import retrofit2.Call;  



import 
retrofit2.Callback;  



import retrofit2.Response;



 



public class MainActivity extends AppCompatActivity {



 



    
private static final String TAG = 
MainActivity.class.getSimpleName();



    
private RecyclerView recyclerView;



    
private List<Movie> moviesData = new 
ArrayList<>();



    
private MovieAdapter movieAdapter;



 



    
@Override



    
protected void onCreate(Bundle 
savedInstanceState) {



        super.onCreate(savedInstanceState);



        setContentView(R.layout.activity_main);



 



        recyclerView = 
(RecyclerView)findViewById(R.id.main_recycler);



        recyclerView.setLayoutManager(new 
LinearLayoutManager(
this));



 



 



        RetroInterface retroInterface = 
RetroClient.getClient().create(RetroInterface.class);



        Call<Movie[]> call = 
retroInterface.getJsonValues();



        call.enqueue(new Callback<Movie[]>() 
{



            @Override



            public void onResponse(Call<Movie[]> 
call, Response<Movie[]> response) {



                moviesData = 
Arrays.asList(response.body());



                movieAdapter = new 
MovieAdapter(moviesData, R.layout.movie_item, getApplicationContext());



                
recyclerView.setAdapter(movieAdapter);



            }



 



            @Override



            public void onFailure(Call<Movie[]> 
call, Throwable t) {



                Log.e(TAG, "HATA: " + t.toString());



            }



        });



    
}



}



Evet, bir yazımın daha sonuna 
geliyorum. Her zamanki gibi aşağıdan ekran görüntüsünü inceleyip. Bu yazıdaki 
projenin tüm kaynak kodlarına yukarıda GitHub bağlantısından ulaşabilirsiniz. 
Faydalı olması dileğiyle..

DISQUS (0 COMMENTS)

Abdullah 
Balta

Daha fazla 
yazı için tıklayın.

Türkiye

Share this post

  

Android: Firebase 
Veritabanı Kullanımı

Merhaba 
arkadaşlar, bu yazımızda Google'ın yeni mobil platformu olan Firebase 
platformunu inceleyeceğiz ve bu platformun birkaç özelliğinden biri olan…

Android: 
PercentLayout Kullanımı

Merhaba 
arkadaşlar, uzun bir süre sonra yeni bir konu ve yeni bir site ile yazılarıma 
devam ediyorum. Öncelikle sitemi…

























































































































Abdullah Balta © 2017Powered by Casperion Ghost 
Theme
Proudly published with Ghost

 2021 Ocak 18 Pazartesi
 613