0
votes

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);
}