Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $ Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $ json json

Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $


This is a well-known issue and based on this answer you could add setLenient:

Gson gson = new GsonBuilder()        .setLenient()        .create();Retrofit retrofit = new Retrofit.Builder()        .baseUrl(BASE_URL)        .client(client)        .addConverterFactory(GsonConverterFactory.create(gson))        .build();

Now, if you add this to your retrofit, it gives you another error:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

This is another well-known error you can find answer here (this error means that your server response is not well-formatted); So change server response to return something:

{    android:[        { ver:"1.5", name:"Cupcace", api:"Api Level 3" }        ...    ]}

For better comprehension, compare your response with Github api.

Suggestion: to find out what's going on to your request/response add HttpLoggingInterceptor in your retrofit.

Based on this answer your ServiceHelper would be:

private ServiceHelper() {        httpClient = new OkHttpClient.Builder();        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);        httpClient.interceptors().add(interceptor);        Retrofit retrofit = createAdapter().build();        service = retrofit.create(IService.class);    }

Also don't forget to add:

compile 'com.squareup.okhttp3:logging-interceptor:3.3.1'


Also this issue occurres when the response contenttype is not application/json. In my case response contenttype was text/html and i faced this problem. I changed it to application/json then it worked.


Using Moshi:

When building your Retrofit Service add .asLenient() to your MoshiConverterFactory. You don't need a ScalarsConverter. It should look something like this:

return Retrofit.Builder()                .client(okHttpClient)                .baseUrl(ENDPOINT)                .addConverterFactory(MoshiConverterFactory.create().asLenient())                .build()                .create(UserService::class.java)