改造发布空数据

时间:2018-06-03 10:53:32

标签: android gson retrofit retrofit2

我是Retrofit的新手。 我只是使用改造添加一行到我的数据库,但我在我的api界面中使用了这样的字段参数。

Call<String> matchWith(@Field("fbid") String fbid, @Field("matchwith") String matchwith);

很难为大对象编写,因此我决定使用@Body注释。但现在它在我的mysql数据库中发布空行/对象。 (在api接口中使用@Field注释,我的代码正确插入数据)

这是我的代码

@POST("/insertuser.php")
Call<User> postUser(@Body User user);



Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://myurl.com")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    Connect connect = retrofit.create(Connect.class);

    Call<User> call = connect.postUser(user);
    call.enqueue(new Callback<User>() {
        @Override
        public void onResponse(Call<User> call, Response<User> response) {

        }

        @Override
        public void onFailure(Call<User> call, Throwable t) {

        }
    });

在我的对象类中,我使用@SerializedName@Expose改装仍然插入空的我只试过@SerilizedName而只是@Expose之后我只使用了同样的结果。

2 个答案:

答案 0 :(得分:1)

@Field@Body注释之间存在差异。您的API可能仅接受form-data数据。这就是为什么当您通过请求主体发送数据时,即使用@Body注释将数据视为空数据。

您可以更改您的网络API以接受数据作为请求正文,然后使用。

More info

答案 1 :(得分:0)

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient.Builder httpClient=new OkHttpClient.Builder();
        httpClient.addInterceptor(logging);**


        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(httpClient.build())
                    .build();
        }

现在您可以看到是否正确发送了正确的数据和服务器响应,否则在服务器中搜索问题