Ява — Модифицированный Android добавляет новую строку в MySQL

я использую модифицировать библиотека в моем проекте, чтобы добавить строку в MySQL БД, и у меня есть некоторые проблемы с Метод @POST.

Это мой код PHP в файле test_retro_post.php на сервере с методом POST:

<?php
$response = array();
if (isset($_POST['id']) && isset($_POST['name']) && isset($_POST['price'])) {

$id = $_POST['id'];
$name = $_POST['name'];
$price = $_POST['price'];

// include db connect class
require_once __DIR__ . '/db_connect.php';

// connecting to db
$db = new DB_CONNECT();

// mysql inserting a new row
$result = mysql_query("INSERT INTO test_retro(id, name, price) VALUES('$id', '$name', '$price')");


if ($result) {
// successfully inserted into database
$response["success"] = 1;
$response["message"] = "Product successfully created.";

// echoing JSON response
echo json_encode($response);
} else {
// failed to insert row
$response["success"] = 0;
$response["message"] = "Oops! An error occurred.";


echo json_encode($response);
}
} else {

$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
echo json_encode($response);
}
?>

Отправляю обычный HttpRequest с кастомным JSONparser, все работает:

        List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", id));
params.add(new BasicNameValuePair("name", name));
params.add(new BasicNameValuePair("price", price));

// getting JSON Object
// url_create_product is URL to my PHP file with POST method


JSONObject json = jsonParser.makeHttpRequest(url_create_product,
"POST", params);

Но что-то не так при использовании Retrofit. Новая строка не добавляется.
Это интерфейс Api_post.java с Модифицированный метод @POST:

 public interface Api_post{
@POST("/test_retro/test_retro_post.php")
Call<RequestBody> createProd(@Body RequestBody body);

Мой класс RequestBody (RequestBody.java):

public class RequestBody{
int id;
String name;
int price;

RequestBody(int id, String name, int price){
this.id=id;
this.name = name;
this.price = price;
}

public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

И, наконец, вызов Retrofit в действии:

 Retrofit restAdapter = new Retrofit.Builder()
.baseUrl(Url.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
Api_post api_post = restAdapter.create(Api_post.java);
Call<RequestBody> call = api_post.createProd(new RequestBody(3, "prod_3", 300);

И затем выполните этот вызов в AsyncTask:

call.execute();

Новая строка в БД MySQL не добавлена. Подскажите пожалуйста что не так с этим кодом? Может быть, мне нужен собственный конвертер?

1

Решение

Ваш сервер ожидает данные, отправленные ему в качестве параметров POST, но вы пытаетесь отправить его в формате JSON. Вы можете либо изменить сервер для принятия JSON, либо изменить модификацию для отправки параметров POST с помощью @Field аннотаций. Кроме того, вы уверены, что хотите, чтобы тип ответа был ResponseBodyне RequestBody

@POST("/test_retro/test_retro_post.php")
Call<ResponseBody> createProd(@Field("id") int id, @Field("name") String name, @Field("price") int price);

позвонить с —

Call<ResponseBody> call = api_post.createProd(3, "prod_3", 300);
0

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

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

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