This example shows how to communicate between server and an android phone with Retrofit.
Dependencies
implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.google.code.gson:gson:2.8.2' implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
APIService.java
package com.a4akhilsudha.xxx.Retrofit; import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Query; public interface APIService { @GET("/api/get_questions.php") //@FormUrlEncoded Call<DataResponse> qstns(@Query("offset") String offset, @Query("category") String category, @Query("lang") String language); @GET("/api/get_exams.php?exam=exam") //@FormUrlEncoded Call<DataResponse_examList> examList(); }
ApiUtils.java
package com.a4akhilsudha.xxx.Retrofit; public class ApiUtils { private ApiUtils() {} public static final String BASE_URL = "https://xxx.a4akhilsudha.com/"; public static APIService getAPIService() { return RetrofitClient.getClient(BASE_URL).create(APIService.class); } }
DataResponse.java
package com.a4akhilsudha.xxx.Retrofit; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; import java.util.List; public class DataResponse { @SerializedName("status") @Expose private String status; @SerializedName("status_message") @Expose private String statusMessage; @SerializedName("data") @Expose private List<Questions> data = null; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getStatusMessage() { return statusMessage; } public void setStatusMessage(String statusMessage) { this.statusMessage = statusMessage; } public List<Questions> getData() { return data; } public void setData(List<Questions> data) { this.data = data; } }
RetrofitClient.java
package com.a4akhilsudha.xxx.Retrofit; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient { private static Retrofit retrofit = null; public static Retrofit getClient(String baseUrl) { if (retrofit==null) { retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .build(); } return retrofit; } }
MainActivity.java
package com.a4akhilsudha.xxx.Activities; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.appcompat.widget.Toolbar; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.Toast; import com.a4akhilsudha.xxx.R; import com.a4akhilsudha.xxx.Retrofit.APIService; import com.a4akhilsudha.xxx.Retrofit.ApiUtils; import com.a4akhilsudha.xxx.Retrofit.DataResponseImages; import com.a4akhilsudha.xxx.Retrofit.ImagesDataProvider; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdView; import com.google.gson.Gson; import java.util.ArrayList; import java.util.List; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class MainActivity extends AppCompatActivity { Toolbar toolbar; APIService mAPIService; RecyclerView trollsRecycler; TrollsAdapter trollsAdapter; List<ImagesDataProvider> imagesDataProviderList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_trolls); toolbar = findViewById(R.id.toolbar); trollsRecycler = findViewById(R.id.trollsRecycler); setSupportActionBar(toolbar); getSupportActionBar().setTitle("PSC Trolls"); toolbar.setTitleTextColor(Color.WHITE); toolbar.setNavigationIcon(R.drawable.round_arrow_back_24); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onBackPressed(); } }); mAPIService = ApiUtils.getAPIService(); imagesDataProviderList = new ArrayList<>(); trollsAdapter = new TrollsAdapter(this, imagesDataProviderList); trollsRecycler.setHasFixedSize(true); trollsRecycler.setLayoutManager(new GridLayoutManager(this, LinearLayoutManager.VERTICAL)); trollsRecycler.setAdapter(trollsAdapter); RequestData(); } public void RequestData() { final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(TrollsActivity.this); LayoutInflater inflater = LayoutInflater.from(TrollsActivity.this); final View dialogView = inflater.inflate(R.layout.progress, null); dialogBuilder.setView(dialogView); final AlertDialog alertDialog = dialogBuilder.create(); alertDialog.show(); alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); mAPIService.trolls().enqueue(new Callback<DataResponseImages>() { @Override public void onResponse(Call<DataResponseImages> call, Response<DataResponseImages> response) { if(response.isSuccessful()) { String json = new Gson().toJson(response); if (response.body().getStatus().equals("success")) { imagesDataProviderList.addAll(response.body().getData()); trollsRecycler.getAdapter().notifyDataSetChanged(); } else if (response.body().getStatus().equals("error") && response.body().getStatusMessage().equals("no_data")) { Toast.makeText(TrollsActivity.this, "No data found", Toast.LENGTH_SHORT).show(); // ShowCompletionDialog("2","You have Completed All the questions","Do you want to restart again?","Yes","No"); } else { Toast.makeText(TrollsActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show(); } Log.i("TAG", "post submitted to API." + response.body().toString()); } alertDialog.dismiss(); } @Override public void onFailure(Call<DataResponseImages> call, Throwable t) { alertDialog.dismiss(); if (t.toString().contains("timeout")) { Toast.makeText(TrollsActivity.this, "Timeout" + "", Toast.LENGTH_SHORT).show(); RequestData(); } Log.e("TAG", "Unable to submit post to API."); } }); } }
TrollsAdapter.java
package com.a4akhilsudha.xxx.Adapters; import android.content.Context; import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.a4akhilsudha.xxx.R; import com.a4akhilsudha.xxx.Retrofit.ImagesDataProvider; import com.bumptech.glide.Glide; import java.util.List; /** * Created by a4akhilsudha. */ public class TrollsAdapter extends RecyclerView.Adapter<TrollsAdapter.MyViewHolder>{ Context context; List<ImagesDataProvider> imagesDataProviderList; public class MyViewHolder extends RecyclerView.ViewHolder { public ImageView troll_img; public MyViewHolder(View view) { super(view); troll_img = view.findViewById(R.id.troll_img); } } public TrollsAdapter(Context context, List<ImagesDataProvider> imagesDataProviderList) { this.context = context; this.imagesDataProviderList = imagesDataProviderList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.troll_item, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { final ImagesDataProvider imagesDataProvider = imagesDataProviderList.get(position); // holder.rdo_grp.clearCheck(); Glide.with(context).load(imagesDataProvider.getImage()).into(holder.troll_img); } @Override public int getItemCount() { return imagesDataProviderList.size(); } }