'Retrofit 2 Response is null even when response code is 200 and response.isSuccessful() is true

My json response file is :

{
    "access_token": "3lfX6-GCJv8uWZE8h8OSDL5eY5oiiInNjLKZTy2ZFxj7Tru4Ounb3jIdPGMe48Ed6QchTGI3il3NxAOTdHe-3hc-1jAsqiCk6Jq_w5DfRESOfjqNBXQCM6sSj65ugygn8F8mIV9DxSm7Ac6GZu5rwwk-yVnYjNh_6xEReqCn21ZzvYIuZJ2M8YGa73o0CPwtGsJO9dPUPIrZAdK1c08iYyAixnG4aqpLfpUnHzmTyng_QQXp1TD3xfPhsNApDymx89BbCvNF2iDKvh75fGYfWKXOUj6QCOrdI4PH0PDU92e6Acjs3GZdyTo5a6SfKR5Pnfm_koehsNcCVG00xtVnfCcFJkVYaSJ5sfyjoCQ5aS8wgEOpPbHtk6AmxQqFBMHgVryxgEphKfriXOJmtg9MTE7CasVM7Ur6tFzf_sqUJERuQWDtGn6QowHVKoMHmM4stRqgU02i1MiiKzv_m83D1Fht1TjAna73_FICdWyXtijzJOaTEdWINclPxUmOa1CjjFcIVRFb0Xn3znTcI7AyNy2UJ_b3r7wf3MxZdR2TNxS9WGPdflIA5cswRy2nxQgex5cKj24c7s8fmaxm2eRH9nG3iGIK1MkQkEc58Wq0nQcPsUTnlRc1x6uAy8H9HToar9ndGnz8yh8XLBqe2PmBKXRIDBIBr_cEqP2vPmJDVq9-yaoJOPNJ4LHhuthTpNoMlhbin892yZHt1jZvJANAMtk8Ub5gkXsOggzzQoGMuWZYcoFVNGDkwiMmG624ija4kWnMAfoxar14OMnBxPbli1macFrfo5VDuZPzz9uoFEudwLeb-FPRsUSXxXj6lttVllOGKRG1bjX58DimfIfP6Mkk1C9w_Snij6sHHe1iY7V_mCOUQzsn1zoyLr5F9UbyoMAaARIOlVjTpZdLQwuz7dVmkQjAisUuJF01PHWyBZVSuKknWqhNivw8Y2QRJwlWGl4EOA1xFU12Qa_aPLL2BFfn-dMFZjALwEQ8-E9t3A63twjC-hx1K5X_3m04alsPFojFbFLhEI_uX5TAKGYriplADdzMjza-J2efRd9epyPvLILtC5mjDeo8Wy1fAuz6UdHBwOXz6gkwoabq0Yx4RDEPkiYLSjR2VdK5lD-wVPHnkY8UewXu7bwG7cnyL4lU-7GKmGfGLYGrCs88v688gfTrHTTSyjZbas5EK4tOQTLZwTruPqlSJXKUmGJTbAG5MtTXqCIEjiiMATJ65feni9OSsF9saKT3GCiEsHF0n-c2vutEnXYOml0YGT48m32nACFN8sCicIUtqEN6j85T6DPzLoWm0_SB4XfbwJjG4cqxbRZCuE6tEIcU3sfxTNAZBtHneWEvuF_7NNUMQNpco3LHFN-Tro5WgHDNFnNjO4BaOsgXtqWzUH6mrAO4J7r9PkDKy6NJU0fTl-FC4neelwMpd_61JVMpI6bFOZp6-pLadXbUteWjjxgUZqE8BCk41JjqoINxraymSu1rRt7w97qwyBkLBM2IpR8153BNGYS1EXZ-sbK57gzBxj4_khxgeNjEVQvbWuIiLjBGqWKQzjDzLvOxFIdVHBfokp-v8vmLh-flq60ebUDtBdEkyfSDcSNzDeGFT4GnwzjSWmTUwEQngo6M3dTGudkMJbpPMTkribTgbYYUmZSgqDWq27enb5qCwPiGfBcwFbOiDIqZttid1LN019F_WCueaiyA0sX1x4inL4d9VNr2DFxJkT1GJo8pMRFHYBdd_HEDS28sCT0XHfLrrqDTG5VBWUapE2jNEnVmNMqsRkIPUC0EKHqcVMS2V7oNrwKsaq8i7SV0ZxmJUZYlrQBb2Lx3wTS6gjboTLqnPkPwNv5SwnNHnTjrsH1CnhHCbX1n779fyCwtirG0xMMorY3gGPGY0GDCL9F0zy5WThFxFIROHiAaYhk3udOE45dFlqjn7OluW43a72OwHiwEbwNRcX1MZ4hPg4I6gw2FPCIE-LXSvOKRzyhqw47lCKGI7KcMUEqy18Py4wmvnxbBYZ4reSUjPa8DLJXqheLkBiU6RX4HiGUWdANgoGDa7kFftOxxV0W0FpAGWSQU6xc6XNY85OiZOY0_gAG20zpG36D15BK_tdp6zY_rEaUdl4r02E7qLcXfb-9BwhlMfkv_SDVpkTortF_GZt-CBgtxhqmLANHWhRpdcqCMTEIamC_F1YIo2BxbZHbS3zXyGwIk4IUp3AObc54hw39bHkE0xxUwSHVPtZJkU4F0QrsISTy3Xg0SIVuoX6a6trN5l7d1RMrZj9EQKuW-5h1dQ-kNH5j3OVb5nzcw4GuVGjx-EuAeB-PCjJRJJa3Yl4AqL4WXDwUxt-A-vpSyVWlJ_EbNk2GdSwv4vGDLeVS4XONFr6Sl4lUXrgMQ4AMnyEIwr4ms4POXnJb20nF87HM",
    "token_type": "bearer",
    "expires_in": 86399,
    "refresh_token": "fc833f6e009c4ca6bcc5a5720fa7c546",
    "as:client_id": "OtherApp",
    "UserId": "13315",
    "InstituteId": "0",
    "FinancialYearId": "0",
    "UserType": "S",
    "StudentId": "59110",
    "StudDetail": "JSON String",
    ".issued": "Fri, 13 May 2022 03:35:03 GMT",
    ".expires": "Sat, 14 May 2022 03:35:03 GMT"
}

I have check the response in App Interceptor, it shows response body but when I check Response response is null.

I created retrofit object in postData method in MainActivity:

private void postData(String username, String password){

        LoginRequest request = new LoginRequest(username, password);

        Map<String, String> map = new HashMap<>();
        map.put("username",request.getUsername());
        map.put("password", request.getPassword());
        map.put("grant_type",request.getGrant_type());
        map.put("client_id",request.getClient_id());
        map.put("client_secret",request.getClient_secret());

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(base_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        PostData pst = retrofit.create(PostData.class);

        Call<Respond> call = pst.createPost(map);

        call.enqueue(new Callback<Respond>() {
            @Override
            public void onResponse(Call<Respond> call, Response<Respond> response) {

                if (response.body() != null){

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, String.valueOf(response.code()),Toast.LENGTH_LONG).show();
                        }
                    });

                }

                if(response.isSuccessful()) {

//                    runOnUiThread(new Runnable() {
//                        @Override
//                        public void run() {
//                            Toast.makeText(MainActivity.this, "in response", Toast.LENGTH_LONG).show();
//                        }
//                    });

                    Intent Homep = new Intent(getApplicationContext(), HomePagee.class)
                                        .putExtra("Student_Details",response.body().getStudDetail());

                    startActivity(Homep);
                }


            }

            @Override
            public void onFailure(Call<Respond> call, Throwable t) {

 //               runOnUiThread(new Runnable() {
 //                   @Override
 //                   public void run() {
 //                       Toast.makeText(MainActivity.this, "fail", Toast.LENGTH_LONG).show();
 //                   }
 //               });

            }
        });

    }

Api client is PostData:

package com.example.majorprojectapp;

import java.util.Map;

import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.QueryMap;

interface PostData {

    @FormUrlEncoded
    @POST("/NirmaLiveApi/token")
    Call<Respond> createPost(@FieldMap Map<String, String> fields);

}

I have used https://https://www.jsonschema2pojo.org/ to create Respond class and in all various classes the result is same.
Respond:

package com.example.majorprojectapp;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

import java.io.Serializable;

public class Respond implements Serializable {

    @SerializedName("access_token")
    @Expose
    private String accessToken;
    @SerializedName("token_type")
    @Expose
    private String tokenType;
    @SerializedName("expires_in")
    @Expose
    private Integer expiresIn;
    @SerializedName("refresh_token")
    @Expose
    private String refreshToken;
    @SerializedName("as:client_id")
    @Expose
    private String asClientId;
    @SerializedName("UserId")
    @Expose
    private String userId;
    @SerializedName("InstituteId")
    @Expose
    private String instituteId;
    @SerializedName("FinancialYearId")
    @Expose
    private String financialYearId;
    @SerializedName("UserType")
    @Expose
    private String userType;
    @SerializedName("StudentId")
    @Expose
    private String studentId;
    @SerializedName("StudDetail")
    @Expose
    private String studDetail;
    @SerializedName(".issued")
    @Expose
    private String issued;
    @SerializedName(".expires")
    @Expose
    private String expires;

    public String getAccessToken() {
        return accessToken;
    }

    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }

    public String getTokenType() {
        return tokenType;
    }

    public void setTokenType(String tokenType) {
        this.tokenType = tokenType;
    }

    public Integer getExpiresIn() {
        return expiresIn;
    }

    public void setExpiresIn(Integer expiresIn) {
        this.expiresIn = expiresIn;
    }

    public String getRefreshToken() {
        return refreshToken;
    }

    public void setRefreshToken(String refreshToken) {
        this.refreshToken = refreshToken;
    }

    public String getAsClientId() {
        return asClientId;
    }

    public void setAsClientId(String asClientId) {
        this.asClientId = asClientId;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getInstituteId() {
        return instituteId;
    }

    public void setInstituteId(String instituteId) {
        this.instituteId = instituteId;
    }

    public String getFinancialYearId() {
        return financialYearId;
    }

    public void setFinancialYearId(String financialYearId) {
        this.financialYearId = financialYearId;
    }

    public String getUserType() {
        return userType;
    }

    public void setUserType(String userType) {
        this.userType = userType;
    }

    public String getStudentId() {
        return studentId;
    }

    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }

    public String getStudDetail() {
        return studDetail;
    }

    public void setStudDetail(String studDetail) {
        this.studDetail = studDetail;
    }

    public String getIssued() {
        return issued;
    }

    public void setIssued(String issued) {
        this.issued = issued;
    }

    public String getExpires() {
        return expires;
    }

    public void setExpires(String expires) {
        this.expires = expires;
    }

}

The response.isSuccessful() is true and is going in new page but the body is null.
I am fairly new on Android and retrofit and have created this much from several videos.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source