Api:
http://reqres.in/api/users?page=2 { "page": 2, "per_page": 6, "total": 12, "total_pages": 2, "data": [ { "id": 7, "email": "michael.lawson@reqres.in", "first_name": "Michael", "last_name": "Lawson", "avatar": "https://reqres.in/img/faces/7-image.jpg" }, { "id": 8, "email": "lindsay.ferguson@reqres.in", "first_name": "Lindsay", "last_name": "Ferguson", "avatar": "https://reqres.in/img/faces/8-image.jpg" }, { "id": 9, "email": "tobias.funke@reqres.in", "first_name": "Tobias", "last_name": "Funke", "avatar": "https://reqres.in/img/faces/9-image.jpg" }, { "id": 10, "email": "byron.fields@reqres.in", "first_name": "Byron", "last_name": "Fields", "avatar": "https://reqres.in/img/faces/10-image.jpg" }, { "id": 11, "email": "george.edwards@reqres.in", "first_name": "George", "last_name": "Edwards", "avatar": "https://reqres.in/img/faces/11-image.jpg" }, { "id": 12, "email": "rachel.howell@reqres.in", "first_name": "Rachel", "last_name": "Howell", "avatar": "https://reqres.in/img/faces/12-image.jpg" } ], "support": { "url": "https://reqres.in/#support-heading", "text": "To keep ReqRes free, contributions towards server costs are appreciated!" } } For the above API we will see the program below activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No data"
android:id="@+id/tv"
android:visibility="gone"
/>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rec"
/>
</LinearLayout>
</layout>
MainActivity.Java
package com.androidian.retro;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.androidian.retro.databinding.ActivityMainBinding;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding= DataBindingUtil.setContentView
(MainActivity.this,R.layout.activity_main);
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://reqres.in/")
.addConverterFactory(GsonConverterFactory.create())
.build();
ListInterface listInterface=retrofit.create(ListInterface.class);
Call<ListRes> listResCall=listInterface.loadData();
listResCall.enqueue(new Callback<ListRes>() {
@Override
public void onResponse(Call<ListRes> call, Response<ListRes> response) {
Log.i("data",new Gson().toJson(response.body()));
Log.i("data", String.valueOf(response.code()));
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(
MainActivity.this, RecyclerView.VERTICAL,
false );
binding.rec.setLayoutManager(linearLayoutManager);
binding.rec.setAdapter(new RecapAdp(MainActivity.this,
response.body().getData()));
}
@Override
public void onFailure(Call<ListRes> call, Throwable t) {
Toast.makeText(MainActivity.this, ""+t.toString(), Toast.LENGTH_SHORT).show();
Log.i("error",t.getMessage().toString());
}
});
}
}
RecapAdp.Java
package com.androidian.retro;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.RecyclerView;
import com.androidian.retro.databinding.CustomBinding;
import java.util.List;
public class RecapAdp extends RecyclerView.Adapter<RecapAdp.MyViewHolder> {
Context context;
CustomBinding binding;
List<Datum> adpdata;
public RecapAdp(MainActivity mainActivity, List<Datum> data) {
context=mainActivity;
adpdata=data;
}
@NonNull
@Override
public RecapAdp.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
binding= DataBindingUtil.inflate(layoutInflater,
R.layout.custom,null,false);
return new RecapAdp.MyViewHolder(binding.getRoot());
}
@Override
public void onBindViewHolder(@NonNull RecapAdp.MyViewHolder holder, int position) {
holder.binding.id.setText(adpdata.get(position).getId().toString());
holder.binding.jurl.setText(adpdata.get(position).getId().toString());
//holder.binding.tile.setText(adpdata.get(position).getYear().toString());
Log.i("datarec",adpdata.toString());
}
@Override
public int getItemCount() {
return adpdata.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
CustomBinding binding;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
binding=DataBindingUtil.getBinding(itemView);
}
}
}
custom.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/ll">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tile"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/id"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/jurl"
/>
</LinearLayout>
</layout>
Listinterface.java
package com.androidian.retro;
import com.google.gson.JsonObject;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
public interface ListInterface {
@Headers("Content-Type:application/json")
@GET("api/users?page=2")
Call<ListRes> loadData();
}
ListRes.java
package com.androidian.retro;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class ListRes {
@SerializedName("page")
@Expose
private Integer page;
@SerializedName("per_page")
@Expose
private Integer perPage;
@SerializedName("total")
@Expose
private Integer total;
@SerializedName("total_pages")
@Expose
private Integer totalPages;
@SerializedName("data")
@Expose
private List<Datum> data;
@SerializedName("support")
@Expose
private Support support;
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public Integer getPerPage() {
return perPage;
}
public void setPerPage(Integer perPage) {
this.perPage = perPage;
}
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
public Integer getTotalPages() {
return totalPages;
}
public void setTotalPages(Integer totalPages) {
this.totalPages = totalPages;
}
public List<Datum> getData() {
return data;
}
public void setData(List<Datum> data) {
this.data = data;
}
public Support getSupport() {
return support;
}
public void setSupport(Support support) {
this.support = support;
}
}
Support.java
package com.androidian.retro;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Support {
@SerializedName("url")
@Expose
private String url;
@SerializedName("text")
@Expose
private String text;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Datum.java
package com.androidian.retro;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Datum {
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("year")
@Expose
private Integer year;
@SerializedName("color")
@Expose
private String color;
@SerializedName("pantone_value")
@Expose
private String pantoneValue;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getYear() {
return year;
}
public void setYear(Integer year) {
this.year = year;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getPantoneValue() {
return pantoneValue;
}
public void setPantoneValue(String pantoneValue) {
this.pantoneValue = pantoneValue;
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.Retro"
android:usesCleartextTraffic="true"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
build.gradle
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
namespace 'com.androidian.retro'
compileSdk 33
defaultConfig {
applicationId "com.androidian.retro"
minSdk 24
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
dataBinding{
enabled=true
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.6.0'
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.google.code.gson:gson:2.8.9'
}