Моя проблема заключается в том, что я не знаю, как начать использовать Дооснащение 2.0 с полученной API - нижеперечисленным ...Retrofit 2.0 throwing "IllegalArgumentException: параметры @Field могут использоваться только с кодировкой формы". Как сделать правильный запрос API и исправить его?
Во-первых, мне нужно имя пользователя, пароль, fbID (опционально), gmailID (опционально) , twitID (необязательно), пол, дата рождения, место (не обязательно - если long и lat имеют значения), долгота (необязательно), широта (необязательно), profileImage (необязательно).
Когда все параметры являются хорошими - принимайте status = true
. Если нет - получить status = false
и необходимые параметры, которые являются неправильными (например, почта уже занята)
Так что я могу получить status = true
или status = false
и массив с макс 5 параметров (имя пользователя, адрес электронной почты, пароль, пол, дата рождения) ,
Я попытался это 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;
}
}
}
with this API models (Pastebin.com)
и этот код в 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
Я пытался зарегистрировать пользователя, используя сообщение человек, и он работает, когда я использовал опцию Body
->x-www-form-urlencoded
.
Как я могу создать запрос I register
к этому API?@Field
Что-то еще? У меня эта ошибка всегда ...
EDIT: Необходимо изменить API Interface
к этому:
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
для меня ...
Но все-таки получил ошибку: Response.rawResponse = Response{protocol=http/1.1, code=400, message=Bad Request, url=http://ip_address:8400/api/register}
. Используя Postman с теми же данными, я получил код = 201 Created. Не знаю, почему ...
Попробуйте изменить '@ Field' на' @ Query' –
@RaphaelTeyssandier 'IllegalArgumentException: Отсутствует либо URL @PUT, либо параметр @Url. для метода AuthRegisterUserApi.getStatus' и моего 'REGISTER_URL = BASE_URL +" register/";' – y07k2
Могу ли я увидеть все URL? И вы можете попытаться сохранить '@ Field' и добавить выше' @ PUT', '@ FormUrlEncoded' –