Retrofit Kütüphanesi ile JSON Parsing Kullanımı

Retrofit Kütüphanesi Json formatında olan verileri kolay bir şekilde işlememize olanak sağlar. Basit bir örnek yaparak anlamaya çalışalım. JSON verilerimizi bu linkten çekerek CardView içine ekleyeceğiz CardView’leri ReyclerView içine aktararak göstermeye çalışacağız.
İlk olarak build.gradle dosyamızda gerekli eklemeleri yapalım.
1 2 3 4 |
compile 'com.android.support:recyclerview-v7:26.1.0' compile 'com.android.support:cardview-v7:26.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' |
build.gradle dosyamızın son hali aşağıdaki olması gerekiyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
apply plugin: 'com.android.application' android { compileSdkVersion 26 defaultConfig { applicationId "com.example.esatgozcu.retrofitjsonparsingkullanimi" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' compile 'com.android.support:recyclerview-v7:26.1.0' compile 'com.android.support:cardview-v7:26.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' } |
Öncelikle çekeceğimiz JSON verilerini aktaracağımız CardView dizaynımızı yapalım.
card_row.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" card_view:cardCornerRadius="5dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="10dp" android:orientation="vertical"> <TextView android:id="@+id/tv_name" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:textSize="18sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" /> <TextView android:id="@+id/tv_version" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_api_level" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </android.support.v7.widget.CardView> |
CardView dizaynımızı yaptıktan sonra CardViewleri aktaracağımız RecylerViewleri activiyt_main.xml dosyamızda aşağıdaki gibi tanımlıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.esatgozcu.retrofitjsonparsingkullanimi.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/card_recycler_view" android:scrollbars="vertical" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout> |
Xml dizaynlarımızı tamamladıktan sonra geriye bunları java sınıfları ile doldurmak kalıyor. İlk olarak CardView içinde gösterilecek olan verilerimizin modelini oluşturalım.
AndroidVersion.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package com.example.esatgozcu.retrofitjsonparsingkullanimi; public class AndroidVersion { private String ver; private String name; private String api; public String getVer() { return ver; } public String getName() { return name; } public String getApi() { return api; } } |
Daha sonra JSONResponse modelini aşağıdaki gibi oluşturuyoruz.
JSONResponse.java
1 2 3 4 5 6 7 8 9 10 |
package com.example.esatgozcu.retrofitjsonparsingkullanimi; public class JSONResponse { private AndroidVersion[] android; public AndroidVersion[] getAndroid() { return android; } } |
Şimdi bir arayüz tanımlamamız gerekiyor. Burada JSON verilerini almak için GET isteği kullanıyoruz. Verileri çekeğimiz url http://www.esatgozcu.com/AndroidJsonParse.php bu şekildedir oluşturduğumuz arayüzde ana url yani http://www.esatgozcu.com/ kısmını değil AndroidJsonParse.php kısmını tanımlamamız gerekiyor.
RequestInterface.java
1 2 3 4 5 6 7 8 9 10 |
package com.example.esatgozcu.retrofitjsonparsingkullanimi; import retrofit2.Call; import retrofit2.http.GET; public interface RequestInterface { @GET("AndroidJsonParse.php") Call<JSONResponse> getJSON(); } |
Verilerin aktarıldığı RecylerView için DataAdapter.java adında bir sınıf tanımlayıp adaptör oluşturmamız gerekiyor.
DataAdapter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
package com.example.esatgozcu.retrofitjsonparsingkullanimi; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { private ArrayList<AndroidVersion> android; public DataAdapter(ArrayList<AndroidVersion> android) { this.android = android; } @Override public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false); return new ViewHolder(view); } @Override public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) { viewHolder.tv_name.setText(android.get(i).getName()); viewHolder.tv_version.setText(android.get(i).getVer()); viewHolder.tv_api_level.setText(android.get(i).getApi()); } @Override public int getItemCount() { return android.size(); } public class ViewHolder extends RecyclerView.ViewHolder{ private TextView tv_name,tv_version,tv_api_level; public ViewHolder(View view) { super(view); tv_name = (TextView)view.findViewById(R.id.tv_name); tv_version = (TextView)view.findViewById(R.id.tv_version); tv_api_level = (TextView)view.findViewById(R.id.tv_api_level); } } } |
Son olarak MainActivity.java sınıfımızı oluşturarak yaptığımız bütün işlemleri harekete geçiriyoruz. Gerekli açıklamaları kod satırları arasında yapmaya çalıştım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
package com.example.esatgozcu.retrofitjsonparsingkullanimi; 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 java.util.ArrayList; import java.util.Arrays; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private ArrayList<AndroidVersion> data; private DataAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); } private void initViews(){ //RecylerView'i tanımlıyoruz recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view); recyclerView.setHasFixedSize(true); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); recyclerView.setLayoutManager(layoutManager); loadJSON(); } private void loadJSON(){ //Json verilerimiz websitesinden çekiyoruz Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://www.esatgozcu.com") .addConverterFactory(GsonConverterFactory.create()) .build(); //RequestInterface ekliyoruz RequestInterface request = retrofit.create(RequestInterface.class); Call<JSONResponse> call = request.getJSON(); call.enqueue(new Callback<JSONResponse>() { @Override public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) { //Eğer hata ile karşılaşılmazsa JSONResponse jsonResponse = response.body(); //Gelen nesneyi Array olarak döndürüyoruz data = new ArrayList<>(Arrays.asList(jsonResponse.getAndroid())); //Adaptere datayı ekliyoruz adapter = new DataAdapter(data); //RecylerView'e adapteri ekliyoruz recyclerView.setAdapter(adapter); } @Override public void onFailure(Call<JSONResponse> call, Throwable t) { //Hata ile karşılaşırsa hatayı bastırıyoruz Log.d("Error",t.getMessage()); } }); } } |
Böylelikle Retrofit kütüphanesini kullanarak nasıl JSON verilerini işleyebileceğimiz öğrenmiş olduk. Buraya tıklayarak projenin kaynak kodlarını indirebilirsiniz.