У меня есть приложение в котором я пытаюсь реализовать функцию логина при помощи логина и пароля, и вот у меня возникла ошибка
error: method savePost in interface APIService cannot be applied to given types;
required: Post
found: String,String
reason: actual and formal argument lists differ in length
метод savepost в интерфейсе:
@POST("v1/login/{login}{password}")
Call<Post> savePost(@Body Post body);
а потом этот-же метод вызывается в mainactivity:
mAPIService.savePost(login, password).enqueue(new Callback<Post>() {
@Override
public void onResponse(@NonNull Call<Post> call, @NonNull Response<Post> response) {
if(response.isSuccessful()) {
showResponse(response.body().toString());
Toast.makeText(LoginActivity.this,"post submitted to API.",Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<Post> call, Throwable t) {
Toast.makeText(LoginActivity.this,"Unable to submit post to API.",Toast.LENGTH_LONG).show();
}
});
я никак не могу понять в чем проблема, если смотреть по ошибке именно то получается что у меня необходимо post а нашло два string. У меня на сервере ждут просто json который я должен вытащить с двух полей для ввода. И я не могу понять в чем проблема, у меня вообще не посылается запрос на сервер.Также у меня есть класс для отправки сериализации данных перед отправкой на сервер:
import com.google.gson.annotations.SerializedName;
public class Post {
@SerializedName("login")
private String login;
@SerializedName("password")
private String password;
public Post(String login, String password) {
this.login = login;
this.password = password;
}
public String getLogin() {
return login;
}
public void setLogin (String login) {
this.login = login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Post{" +
"User login ='" + login + '\'' +
", password ='" + password + '}';
}
}
Если кто-то знает в чем проблема буду благодарен за помощь.
Ваш метод: Call<Post> savePost(@Body Post body)
, — это значит, что он принимает один входной параметр. А вы передаёте два: savePost(login, password)
.
Вам стоит поступить так:
Создайте класс, который будет выступать телом для запроса после его сериализации:
class LoginBody {
private String login, password;
// геттеры, сеттеры, конструкторы не забудьте
}
И затем вызываете:
mAPIService.savePost(new LoginBody(login, password))
Ваш объект будет сериализован в следующий json:
{ "login": "значение переменной login", "password": "значение переменной password" }
Но для автоматической де/сериализации не забудьте в билдере при инициализации вашего объекта retrofit
указать GsonConverterFactory
.
И также, конечно же, сигнатуру метода тоже придётся подправить:
@POST("v1/login/{login}{password}")
Call<Post> savePost(@Body LoginBody body);
И зачем вы используете /{login}{password}
? Это будет заменено в итоге на /user1234password1234
при логине user1234
и пароле password1234
, каким образом бэкенд определит, где закончился логин и начался пароль?
И тем более, для того, чтобы внутри @POST("вот здесь")
что-то заменялось, необходимо передать дополнительные входные параметры с аннотацией @Path
.
Более развёрнутый пример (в комментариях неудобно, да и не стоит отвечать).
Вот такой вот метод:
@POST("/v1/login/{parameter_0}/{parameter_1}")
Call<SomeResponse> auth(@Body LoginBody body, @Path("parameter_0") p0, @Path("parameter_1") p1);
Нужно вызывать так:
String a = "qwerty";
String b = "abcdef";
api.auth(new LoginBody(login, password), a, b);
В итоге будет отправлен запрос по такому адресу:
https://адрес_сервера/v1/login/qwerty/abcdef
С таким телом:
{ "login": "значение login", "password": "значение password" }
Адрес сервера, очевидно, передаете при инициализации билдера retrofit
.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Подскажите, что прочитать, чтоб понять как Spring работает в многопользовательском режиме?
Существуют шесть объектов - кубов у которых есть объем(сторона задана в ручную)Как мне отсортировать объемы кубов и вывести информацию в табличном...