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'