java - 通过改造在 POST 请求中发送 JSON

标签 java android json post retrofit

<分区>

我已经多次看到这个问题并尝试了很多解决方案但没有解决我的问题,我正在尝试使用改造在 POST 请求中发送 json,我不是编程专家所以我可能会错过一些明显的东西.

我的 JSON 是一个字符串,看起来像这样:

{"id":1,"nom":"Hydrogène","slug":"hydrogene"}

我的界面(称为 APIService.java)如下所示:

@POST("{TableName}/{ID}/update/0.0")
Call<String> cl_updateData(@Path("TableName") String TableName, @Path("ID") String ID);

我的 ClientServiceGenerator.java 看起来像这样:

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);
}}

最后是我 Activity 中的代码

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();
        }
    });

如果您还需要什么,请告诉我,希望有人能帮助我。

编辑 第一次没有提到它,但我的 JSON 不会总是使用相同的键(id、nom、slug)。

最佳答案

首先你需要创建一个对象来表示你需要的json:

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;
    }
}

然后,修改您的服务以能够发送此对象:

@POST("{TableName}/{ID}/update/0.0")
Call<String> cl_updateData(@Path("TableName") String TableName, @Path("ID") String ID, @Body Data data);

最后,传递这个对象:

Call<String> call = client.cl_updateData("atomes", "1", new Data(1, "Hydrogène", "hydrogene"));

UPD

要能够发送任何数据,请使用 Object 而不是 Data:

@POST("{TableName}/{ID}/update/0.0")
Call<String> cl_updateData(@Path("TableName") String TableName, @Path("ID") String ID, 
        @Body Object data);

关于java - 通过改造在 POST 请求中发送 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139117/

相关文章:

java - Applet JSObject javascript 调用是否序列化?

android - 如何从 Push firebase 数据中检索数据

Wi-Fi无法上网时Android Lollipop默认使用Mobile Data?

javascript - 从 javascript for 循环创建 JSON 字符串

找不到 javax.servlet.jsp.jSTL.core.Config 类

java - 在 JBoss 4.0.2 war 部署中找不到 WEB-INF/lib jar

java - 追踪长交易

android - 使用 HashMap 在带有 SimpleAdapter 的 ListView 中显示图像 - Android

java - 柱体改造2包括大括号

json - 如何在 react native 应用程序中获取带有 header 的 api(POST)