I am using Retrofit library in my app, I face a problem request timeout. Does Retrofit have some way to solve this? I am useing viewmodel and flow of the MVVM pattern (I'm new to using MVVM) i am using sportmonks cricket Api. this side link here : https://www.sportmonks.com/
CricketViewModel
import android.content.Context;
import android.os.StrictMode;
import android.util.Log;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import com.marufalam.cricketapi.BuildConfig;
import com.marufalam.cricketapi.models.continents.ContinentsResponseModel;
import com.marufalam.cricketapi.models.players.PlayersResponseModel;
import com.marufalam.cricketapi.models.teams.TeamByID;
import com.marufalam.cricketapi.networks.CricketService;
import com.marufalam.cricketapi.utils.Constants;
import java.io.IOException;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class CricketViewModel extends ViewModel {
Context context;
private final String TAG = CricketViewModel.class.getSimpleName();
private MutableLiveData<ContinentsResponseModel> getContinents = new MutableLiveData();
private MutableLiveData<TeamByID> getTeams = new MutableLiveData();
private MutableLiveData<PlayersResponseModel> playerList = new MutableLiveData();
public LiveData<PlayersResponseModel> getPlayerList() {
return playerList;
}
public LiveData<TeamByID> getGetTeams() {
return getTeams;
}
public LiveData<ContinentsResponseModel> getGetContinents() {
return getContinents;
}
int countryId;
public void loadData() {
loadContinents();
loadTeam();
loadPlayers();
}
private void loadContinents() {
final String endUrl = "continents?api_token=" + Constants.CRICKET_API_KEY;
CricketService.getService().getContinents(endUrl)
.enqueue(new Callback<ContinentsResponseModel>() {
@Override
public void onResponse(Call<ContinentsResponseModel> call, Response<ContinentsResponseModel> response) {
if (response.code() == 200) {
getContinents.postValue(response.body());
// Log.e(TAG, "onResponse: " + response.body().getData().size());
} else {
Log.e(TAG, "Error: ");
}
}
@Override
public void onFailure(Call<ContinentsResponseModel> call, Throwable t) {
Log.e(TAG, "Error: " + t.getLocalizedMessage());
}
});
}
private void loadTeam() {
CricketService.getService().getTeams(47, Constants.CRICKET_API_KEY)
.enqueue(new Callback<TeamByID>() {
@Override
public void onResponse(Call<TeamByID> call, Response<TeamByID> response) {
getTeams.postValue(response.body());
Log.d(TAG, "onResponse: " + response.body().getData());
countryId = response.body().getData().getCountryId();
Log.d(TAG, "onResponse: " + countryId);
}
@Override
public void onFailure(Call<TeamByID> call, Throwable t) {
Log.d(TAG, "onFailure: " + t.getMessage());
}
});
}
private void loadPlayers() {
CricketService.getService().getPlayers(Constants.CRICKET_API_KEY, 98).enqueue(new Callback<PlayersResponseModel>() {
@Override
public void onResponse(Call<PlayersResponseModel> call, Response<PlayersResponseModel> response) {
Log.d(TAG, "onResponsePlayers: "+response.body());
}
@Override
public void onFailure(Call<PlayersResponseModel> call, Throwable t) {
Log.d(TAG,"Error at "+t.getMessage());
}
});
}
}
CricketService
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class CricketService {
public static CricketServiceApi getService(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://cricket.sportmonks.com/api/v2.0/")
.addConverterFactory(GsonConverterFactory.create())
.build();
return retrofit.create(CricketServiceApi.class);
}
}
CricketServiceApi
import com.marufalam.cricketapi.models.continents.ContinentsResponseModel;
import com.marufalam.cricketapi.models.playerdata.PlayerArray;
import com.marufalam.cricketapi.models.players.DataItem;
import com.marufalam.cricketapi.models.players.PlayersResponseModel;
import com.marufalam.cricketapi.models.teams.TeamByID;
import com.marufalam.cricketapi.models.teams.TeamsResponseModel;
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.Url;
public interface CricketServiceApi {
//getAllContinents
@GET
Call<ContinentsResponseModel> getContinents(@Url String endUrl);
//getTeam
@GET("teams/{id}")
Call<TeamByID> getTeams(@Path("id") int id, @Query("api_token") String token);
//getPlayers
@GET("players")
Call<PlayersResponseModel> getPlayers(@Query("api_token") String token,@Query("country_id") int cid);
}