【问题标题】:Why my HttpPost doesn't work?为什么我的 HttpPost 不起作用?
【发布时间】:2023-04-03 13:24:01
【问题描述】:

我有问题。我正在尝试为Android 制作REST API,但我的HttpPost 不起作用。我正在使用XAMPPSlim framework 来解决这个问题。

我创建了 POST 方法,我想在该方法中向表 cars 添加一个新的 Car

我的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 是的,我有。
  • 你能用堆栈跟踪发布 locgat 吗?
  • 您在$idCar = $app-&gt;request-&gt;post("idCar"); $name = $app-&gt;request-&gt;post("name"); $dateCar = $app-&gt;request-&gt;post("dateCar"); 中的标识符与BasicNameValuePair idCarValuePair = new BasicNameValuePair("id", newCar.getIdCar()); BasicNameValuePair nameValuePair = new BasicNameValuePair("name", newCar.getName()); BasicNameValuePair dateValuePair = new BasicNameValuePair("date", newCar.getDateBuyCar()); 中的标识符不匹配。
  • 如果你在这个网站上浏览了一下,你早就发现了。如果您的客户不阅读echo json_encode($cars,JSON_UNESCAPED_UNICODE );,您怎么能说Now it works?什么有效?

标签: php android mysql xampp slim


【解决方案1】:

问题是我在AsyncTaskPOST 方法中使用了不同的ID's

例如,当我尝试在 POST 方法上检索来自 AsyncTask 的信息时:

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

我使用的是ID'sidCarnamedateCar

但是当我试图将信息发送到我的AsyncTask 上的POST 方法时:

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

我使用的是ID'sidnamedate

所以POST 方法无法从AsyncTask 检索信息,因为我使用的ID'sPOST 方法不同。

为了解决这个问题,我不得不更改 ID's 我在 AsyncTask 上发送的信息。代码如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-25
    • 2018-03-05
    • 2013-04-19
    • 2015-10-17
    • 2016-02-20
    • 2012-01-07
    • 2012-06-11
    • 2015-08-26
    相关资源
    最近更新 更多