Hassan Raza
Hassan Raza

Reputation: 85

Receiving response body in Retrofit2 but onResponse is not getting called

I am receiving a body from my API call but onResponse() is not getting called, here are the methods:

final Rest_manager_league rest = new Rest_manager_league();
Call<List<Root>> listCall = rest.getMLeague_conn().getLeague(x);
listCall.enqueue(new Callback<List<Root>>() {
    @Override
    public void onResponse(Call<List<Root>> call, Response<List<Root>> response) {
        lg = response.body();
        Log.d("res", "ON");
        if (response.isSuccessful()){
            textView.setText(lg.get(3).getStanding().get(2).getTeamName());
            Log.d("s", "true");
        }
    }

    @Override
    public void onFailure(Call<List<Root>> call, Throwable t) {
        Log.d("Failure", "Failed");
    }
});

Here is the Retrofit interface & the service:

public interface league_Conn {
    @GET("/v1/soccerseasons/{id}/leagueTable")
    @Headers("X-Auth-Token:" +
            "1869f69f772b40a2a12fd6eefb4e48ef ")
    Call<List<Root>> getLeague(@Path("id") int id);
}

public class Rest_manager_league {
    private league_Conn mleague_conn;

    public league_Conn getMLeague_conn() {

        if (mleague_conn == null) {

            HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
            logging.setLevel(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient client = new OkHttpClient.Builder().addInterceptor(logging).build();
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://api.football-data.org/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(client)
                    .build();
            mleague_conn = retrofit.create(league_Conn.class);

        }


        return mleague_conn;
    }
}

In the logcat, onFailure() is showing up. Like so:

okhttp3 <-- END HTTP (8300 byte body) Failer :Failed

Why is onResponse() not getting called?

Upvotes: 5

Views: 2555

Answers (1)

Daniel
Daniel

Reputation: 2373

You are getting a response body (8300 bytes) but onFailure is getting called, because your returned body does not agree with your GSONFactory. The deserialization process did not work. You can pinpoint the problem by printing a stack trace as @yazan pointed out. Just type:

t.printStackTrace()

in onFailure().

Edit:

The error occurs because you're telling Retrofit that you're expecting a list but instead you're getting a JSON object. I took a quick look at the API that you're using and it looks like it returns a JSON object and the returned object then contains the list you're interested in accessing. Try replacing instances of List<Root> to just Root. For more help, you can also check this question:

GSON throws Expected BEGIN_ARRAY but was BEGIN_OBJECT error

Upvotes: 4

Related Questions