Je n'ai pu exécuter que l'exemple du monde bonjour (GithubService) à partir des documents.
Le problème est que lorsque j'exécute mon code, j'obtiens l'erreur suivante, à l'intérieur de onFailure()
Utilisez JsonReader.setLenient (true) pour accepter un JSON malformé sur le chemin de la ligne 1 de la colonne 1 $
Mon API prend POST valeur params, donc pas besoin de les coder en JSON, mais elle retourne la réponse en JSON.
Pour la réponse, j'ai obtenu la classe ApiResponse que j'ai générée à l'aide d'outils.
Mon interface:
public interface ApiService {
@POST("/")
Call<ApiResponse> request(@Body HashMap<String, String> parameters);
}
Voici comment j'utilise le service:
HashMap<String, String> parameters = new HashMap<>();
parameters.put("api_key", "xxxxxxxxx");
parameters.put("app_id", "xxxxxxxxxxx");
Call<ApiResponse> call = client.request(parameters);
call.enqueue(new Callback<ApiResponse>() {
@Override
public void onResponse(Response<ApiResponse> response) {
Log.d(LOG_TAG, "message = " + response.message());
if(response.isSuccess()){
Log.d(LOG_TAG, "-----isSuccess----");
}else{
Log.d(LOG_TAG, "-----isFalse-----");
}
}
@Override
public void onFailure(Throwable t) {
Log.d(LOG_TAG, "----onFailure------");
Log.e(LOG_TAG, t.getMessage());
Log.d(LOG_TAG, "----onFailure------");
}
});
Si vous ne voulez pas de paramètres encodés JSON, utilisez ceci:
@FormUrlEncoded
@POST("/")
Call<ApiResponse> request(@Field("api_key") String apiKey, @Field("app_id") String appId);
Vous devez savoir comment vous souhaitez coder les paramètres de publication. L'annotation @Header
Est également importante dans ce qui suit. Il est utilisé pour définir le type de contenu utilisé dans l'en-tête HTTP.
@Headers("Content-type: application/json")
@POST("user/savetext")
public Call<Id> changeShortText(@Body MyObjectToSend text);
Vous devez en quelque sorte encoder vos paramètres de publication. Pour utiliser JSON pour la transmission, vous devez ajouter .addConverterFactory(GsonConverterFactory.create(gson))
dans votre déclaration Retrofit.
Retrofit restAdapter = new Retrofit.Builder()
.baseUrl(RestConstants.BASE_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.client(httpClient)
.build();
Une autre source de votre problème pourrait être que le JSON, qui provient du backend rest, semble être incorrect. Vous devriez vérifier la syntaxe json avec un validateur, par ex. http://jsonlint.com/ .