J'ai vu ces questions plusieurs fois et essayé de nombreuses solutions mais sans résoudre mon problème, j'essaie d'envoyer un json dans une demande POST utilisant la modification, je ne suis pas un expert en programmation donc je peux manquer quelque chose d'évident.
Mon JSON est dans une chaîne et ressemble à ça:
{"id":1,"nom":"Hydrogène","slug":"hydrogene"}
Mon interface (appelée APIService.Java) ressemble à ça:
@POST("{TableName}/{ID}/update/0.0")
Call<String> cl_updateData(@Path("TableName") String TableName, @Path("ID") String ID);
Et mon ClientServiceGenerator.Java ressemble à ça:
public class ClientServiceGenerator{
private static OkHttpClient httpClient = new OkHttpClient();
public static <S> S createService(Class<S> serviceClass, String URL) {
Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.client(httpClient).build();
return retrofit.create(serviceClass);
}}
Et enfin voici le code de mon activité
APIService client = ClientServiceGenerator.createService(APIService.class, "http://mysiteexample.com/api.php/");
Call<String> call = client.cl_updateData("atomes", "1");
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Response<String> response, Retrofit retrofit) {
if (response.code() == 200 && response.body() != null){
Log.e("sd", "OK");
}else{
Log.e("Err", response.message()+" : "+response.raw().toString());
}
}
@Override
public void onFailure(Throwable t) {
AlertDialog alertError = QuickToolsBox.simpleAlert(EditDataActivity.this, "updateFail", t.getMessage(), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertError.show();
}
});
Dites-moi si vous avez besoin d'autre chose, j'espère que quelqu'un pourrait m'aider.
EDIT Je ne l'ai pas mentionné la première fois mais mon JSON ne sera pas toujours avec les mêmes clés (id, nom, slug).
Vous devez d'abord créer un objet pour représenter le json dont vous avez besoin:
public class Data {
int id;
String nom;
String slug;
public Data(int id, String nom, String slug) {
this.id = id;
this.nom = nom;
this.slug = slug;
}
}
Ensuite, modifiez votre service pour pouvoir envoyer cet objet:
@POST("{TableName}/{ID}/update/0.0")
Call<String> cl_updateData(@Path("TableName") String TableName, @Path("ID") String ID, @Body Data data);
Enfin, passez cet objet:
Call<String> call = client.cl_updateData("atomes", "1", new Data(1, "Hydrogène", "hydrogene"));
UPD
Pour pouvoir envoyer des données, utilisez Object
au lieu de Data
:
@POST("{TableName}/{ID}/update/0.0")
Call<String> cl_updateData(@Path("TableName") String TableName, @Path("ID") String ID,
@Body Object data);