Java — POST-данные в базу данных с Retrofit

Я застрял в проблеме с отправкой данных на сервер с Retrofit.
Вот что я пытаюсь сделать (а что не работает):

Это класс, экземпляры которого конвертируются и отправляются в веб-сервис:

  public class Txt {
private String text;

public Txt (String text) {
this.text = text;
}

public String getText () {
return text;
}
}

Это мой интерфейс:

public interface textapi {

@POST("/php/set_string.php")
public void setText (Txt text, Callback<String> cb);
}

Мой веб-сервис:

<?php
$user = "user";
$database = "db";
$password = "pw";

$data = json_decode(file_get_contents("php://input"), true);

$con = mysqli_connect("localhost", $user, $password, $databse);

$statement = mysqli_prepare ($con, "INSERT INTO votes (vote_text) VALUES (?)");
mysqli_stmt_bind_param ($statment, "s", $data['text']);
mysqli_stmt_execute($statement);

mysqli_close($statment);
mysqli_close($con);

header('Content-Type: application/json');
echo json_encode($data['text']);
?>

Я не знаю, что я делаю не так. Я исследовал и много пробовал, но не могу заставить его работать: /

РЕДАКТИРОВАТЬ: Хорошо, я получил сообщение об ошибке на Android:

com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true)

РЕДАКТИРОВАТЬ: я решил проблему, добавив @Body в интерфейсе:

 public interface textapi {

@POST("/php/set_string.php")
public void setText (@Body Txt text, Callback<String> cb);
}

8

Решение

это

@POST("/php/set_string.php")
public void setText (Txt text, Callback<String> cb);

Должно быть

@POST("/php/set_string.php")
public void setText (@Body Txt text, Callback<String> cb);

поскольку PHP ожидает необработанные данные, указав аннотацию @Body перед текстом объекта, вы говорите Java о присоединении объекта в виде необработанного тела.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]