2015-08-10 2 views
1

У меня проблема. Я пытаюсь сделать 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 и он работает должным образом.

Заранее благодарен!

+0

Вы вставили в манифест разрешение ? – SimoV8

+0

@ SimoV8 Да, у меня оно есть. –

+0

Можете ли вы опубликовать locgat с помощью stacktrace? – SimoV8

ответ

1

Проблема была в том, что я использовал разные ID's в AsyncTask и в методе POST.

Например, когда я пытался получить на моем POST методе информацию от моего AsyncTask:

$idCar = $app->request->post("idCar"); 
$name = $app->request->post("name"); 
$dateCar = $app->request->post("dateCar"); 

Я использовал ID's: idCar, name и dateCar.

Но когда я пытался отправить информацию к методу POST на моем AsyncTask:

BasicNameValuePair idCarValuePair = new BasicNameValuePair("id", newCar.getIdCar()); 
BasicNameValuePair nameValuePair = new BasicNameValuePair("name", newCar.getName()); 
BasicNameValuePair dateValuePair = new BasicNameValuePair("date", newCar.getDateBuyCar()); 

Я использовал ID's: id, name и date.

Так метод POST не может получить информацию от AsyncTask, потому что ID's, что я использовал там были разные уважение метод POST.

Чтобы решить эту проблему, мне пришлось изменить ID's на информацию, которую я отправлял на своем AsyncTask. Код будет выглядеть так:

BasicNameValuePair idCarValuePair = new BasicNameValuePair("idCar", newCar.getIdCar()); 
BasicNameValuePair nameValuePair = new BasicNameValuePair("name", newCar.getName()); 
BasicNameValuePair dateValuePair = new BasicNameValuePair("dateCar", newCar.getDateBuyCar()); 
Смежные вопросы