#java #android #retrofit #retrofit2
#java #Android #модернизация #модернизация 2
Вопрос:
Я не могу заставить POST http-запрос работать. Похоже, я неправильно использую библиотеку retrofit2, но, судя по моим исследованиям, то, что у меня есть, должно работать.
Вот как выглядит мой упрощенный объектный класс:
public class Tournament {
private String name;
private int nOfGames;
private String game;
private String userId;
public Tournament(String name, int nOfGames, String game, String userId) {
this.name = name;
this.nOfGames = nOfGames;
this.game = game;
this.userId = userId;
}
}
Я попробовал два подхода:
подход 1:
модифицированный интерфейс:
@Headers({"Content-Type: application/json;charset=UTF-8"})
@POST("TournamentApi/")
Single<Tournament> createTournament(@Body Tournament tournament);
использование:
Tournament tournament = new Tournament(
"some name",
2,
"some game",
"1");
api.createTournament(tournament);
подход 2:
модифицированный интерфейс:
@FormUrlEncoded
@POST("TournamentApi/")
public void insertTournament(
@Field("Name") String name,
@Field("NOfGames") int nOfGames,
@Field("Game") String game,
@Field("UserId") String userId,
Callback<Response> callback);
использование:
api.insertTournament(
tournamentName.getText().toString(),
Integer.parseInt(bestOfN.getText().toString()),
gameName.getText().toString(),
"1",
new Callback<Response>() {
@Override
public void onResponse(Call<Response> call, Response<Response> response) {
String output = call.toString();
String responze = response.toString();
}
@Override
public void onFailure(Call<Response> call, Throwable t) {
String output = call.toString();
}
});
Первый подход вообще ничего не делает, никаких ошибок, ничего. Я даже пытался использовать HttpLoggingInterceptor, но ничего не появляется вообще. Похоже, никаких просьб не поступало. Второй подход полностью завершает работу моего приложения, потому что я получаю No Retrofit annotation found. (parameter #1)
сообщение об ошибке, но я видел другие сообщения с теми же фрагментами без каких-либо примечаний к обратному вызову, которые предположительно работали.
Я также использую retrofit2 для запросов get, которые работают просто отлично, это просто post-запросы, которые я не могу заставить работать.
Наконец, вот что работает безупречно (вставляет запись в базу данных), если я использую его с Postman:
POST http://192.168.1.124:5001/api/TournamentApi
{
"Name": "blabla_tournament",
"NOfGames": 3,
"Game": "some_game",
"UserId": "5"
}
Я бы заподозрил, что это как-то связано с localhost, но поскольку запросы get работают так, как и должны быть, я почти уверен, что проблема в том, что я неправильно использую retrofit2.
Комментарии:
1. Каков ответ на ваш POST-запрос API?
Ответ №1:
Попробуйте что-то вроде этого. @Headers({«Content-Type: application / json;charset=UTF-8»}) @POST(«TournamentApi») Одиночный турнир createTournament(турнир @Body Tournament); `
`
Ответ №2:
Вы должны изменить: ‘@Body Tournament tournament’
на: ‘@Body JSONObject tournament’
Это будет работать.