我是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
之后我只使用了同样的结果。
答案 0 :(得分:1)
@Field
和@Body
注释之间存在差异。您的API可能仅接受form-data
数据。这就是为什么当您通过请求主体发送数据时,即使用@Body
注释将数据视为空数据。
您可以更改您的网络API以接受数据作为请求正文,然后使用。
答案 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();
}
现在您可以看到是否正确发送了正确的数据和服务器响应,否则在服务器中搜索问题