改造2.0抛出“非法参数异常:@Field参数只能与表单编码一起使用”。如何进行正确的API查询并修复它?
我的问题是我不知道如何开始使用带有收到的API的Retrofit 2.0 - 下面提到...
首先,我需要用户名,密码,fbID(可选),gmailID(可选),twitID(可选),性别,出生日期,位置(不是必需的 - 如果长和纬度有值),经度(可选),纬度(可选),配置文件图像(可选)。
当所有参数都正常时 - 接收 。如果不是 - 接收和必需的参数是错误的(例如,邮件已被采用)status = true
status = false
因此,我可以接收或并数组最多5个参数(用户名,电子邮件,密码,性别,出生日期)。status = true
status = false
我试过这个:API Interface
public interface AuthRegisterUserApi {
@PUT()
Call<AuthRegisterUserModel> getStatus(
@Field("username") String username,
@Field("email") String email,
@Field("password") String password,
@Field("fbID") String fbID,
@Field("gmailID") String gmailID,
@Field("twitID") String twitID,
@Field("gender") String gender,
@Field("birthDate") String birthDate,
@Field("location") String location,
@Field("longitude") String longitude,
@Field("latitude") String latitude,
@Field("profileImage") String profileImage
);
class Factory {
private static AuthRegisterUserApi service;
public static AuthRegisterUserApi getInstance() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ApiConstants.REGISTER_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
service = retrofit.create(AuthRegisterUserApi.class);
return service;
}
}
}
和此代码在 :Activity
AuthRegisterUserApi.Factory.getInstance()
.getStatus(
usernameEditText.getText().toString(),
emailEditText.getText().toString(),
passwordEditText.getText().toString(),
"", "", "",
(maleRadioButton.isChecked() ? "male" : "female"),
mYear + "-" + mMonth+1 + "-" + mDay,
(geoLocationToggleButton.isChecked() ? geoLocationEditText.getText().toString() : ""),
(!geoLocationToggleButton.isChecked() ? "50" : ""),
(!geoLocationToggleButton.isChecked() ? "50" : ""),
"")
.enqueue(new Callback<AuthRegisterUserModel>() {
@Override
public void onResponse(Call<AuthRegisterUserModel> call, Response<AuthRegisterUserModel> response) {
if(response.isSuccessful()) {
if (response.body().isStatus()) {
showToast(getApplicationContext(), "Registration ok.");
} else {
response.body().getInfo().getUsername();
}
}
}
@Override
public void onFailure(Call<AuthRegisterUserModel> call, Throwable t) {
}
});
我有错误:java.lang.IllegalArgumentException: @Field parameters can only be used with form encoding. (parameter #1) for method AuthRegisterUserApi.getStatus
我尝试使用Postman注册用户,当我使用选项->时,它可以正常工作。Body
x-www-form-urlencoded
如何创建对此 API 的注册
查询?更改为其他内容?我总是得到这个错误...@Field
编辑:需要将API接口
更改为:
public interface AuthRegisterUserApi {
@FormUrlEncoded
@PUT("/api/register")
Call<AuthRegisterUserModel> getStatus(
@Field("username") String username,
@Field("email") String email,
@Field("password") String password,
@Field("fbID") String fbID,
@Field("gmailID") String gmailID,
@Field("twitID") String twitID,
@Field("gender") String gender,
@Field("birthDate") String birthDate,
@Field("location") String location,
@Field("longitude") String longitude,
@Field("latitude") String latitude,
@Field("profileImage") String profileImage
);
class Factory {
private static AuthRegisterUserApi service;
public static AuthRegisterUserApi getInstance() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ApiConstants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
service = retrofit.create(AuthRegisterUserApi.class);
return service;
}
}
}
BASE_URL = http://ip_address:8400
给我的。。。
但仍然得到错误:.使用具有相同数据的Postman,我收到的代码= 201已创建。不知道为什么...Response.rawResponse = Response{protocol=http/1.1, code=400, message=Bad Request, url=http://ip_address:8400/api/register}