У меня проблема. Я пытаюсь сделать REST API
для Android
, но мой HttpPost
не работает. Я использую XAMPP
и Slim framework
для этой проблемы.Почему мой HttpPost не работает?
У меня есть мой метод POST
, в котором я хочу добавить один новый Car
в таблицу cars
.
Конструктор моего Car
объекта:
public Car(int idCar, String name, Date dateBuyCar)
{
this.idCar = idCar;
this.name = name;
this.dateBuyCar = dateBuyCar;
}
Мой POST
метод с Slim
это как:
$app->post("/cars/",function() use($app)
{
$idCar = $app->request->post("idCar");
$name = $app->request->post("name");
$dateCar = $app->request->post("dateCar");
try{
$connection = getConnection();
$dbh = $connection->prepare("INSERT INTO cars VALUES(?,?,?)");
$dbh->bindParam(1,$idCar);
$dbh->bindParam(2,$name);
$dbh->bindParam(3,$dateCar);
$dbh->execute();
$cars = $connection->lastInsertId();
$connection = null;
header("HTTP/1.1 200");
header("Content-Type:application/json; charset=utf-8");
echo json_encode($cars,JSON_UNESCAPED_UNICODE);
}catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
});
И я делаю мой HttpPost
метод как это:
class addCarDatabase extends AsyncTask<Void, Integer, Void> {
private Car newCar;
addCarDatabase(Car newCar)
{
this.newCar = newCar;
}
protected void onPreExecute(){
}
protected Void doInBackground(Void... params) {
String date = null;
date = new SimpleDateFormat("yyyy-MM-dd").format(newCar.getDate());
String url = "http://IP of my computer/project/cars/";
HttpClient httpClient = new DefaultHttpClient();
HttpPost method = new HttpPost(url);
BasicNameValuePair idCarValuePair = new BasicNameValuePair("id", newCar.getIdCar());
BasicNameValuePair nameValuePair = new BasicNameValuePair("name", newCar.getName());
BasicNameValuePair dateValuePair = new BasicNameValuePair("date", newCar.getDateBuyCar());
List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
nameValuePairList.add(idCarValuePair);
nameValuePairList.add(nameValuePair);
nameValuePairList.add(dateValuePair);
try{
UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairList);
method.setEntity(urlEncodedFormEntity);
} catch (UnsupportedEncodingException uee) {
System.out.println("An Exception given because of UrlEncodedFormEntity argument :" + uee);
uee.printStackTrace();
}
try {
HttpResponse response = httpClient.execute(method);
Log.d("Response", response.toString());
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
protected void onProgressUpdate(){
}
protected void onPostExecute(){
}
}
И в моем MySQL
базов данных (я использую phpmyadmin
администрировать его) У меня есть три столбца, каждый из них для одного из атрибутов нового Car
, которые я хочу добавить:
--> id(int)
--> name(String)
--> dt(date)
Я думаю, что проблема это потому, что у меня есть Date
в моем объекте, но я не уверен в этом. Я думаю, что это может быть проблемой, потому что я видел, что даты в phpmyadmin
хранятся как 2010-12-06
, и когда я использую мое приложение, мне нужна дата, например 06-12-2010
, поэтому внутри приложения я разбираю ее. Я снова разбираю его, чтобы ввести дату нового Car
с форматом, который у него есть в phpmyadmin
(Как вы можете видеть в AsyncTask
).
Я знаю, что вся информация поступает прямо на AsyncTask
, потому что я проверил его с помощью Logs
, но когда он прибывает на HttpPost
, ничего не происходит.
В чем может быть проблема?
P.S: Я знаю, что подключение к базе данных с XAMPP
это правильно, потому что я делаю метод GET
и он работает должным образом.
Заранее благодарен!
Вы вставили в манифест разрешение ? –
SimoV8
@ SimoV8 Да, у меня оно есть. –
Можете ли вы опубликовать locgat с помощью stacktrace? – SimoV8