【问题标题】:RetroFit Failing to send POST requestRetroFit 发送 POST 请求失败
【发布时间】:2020-04-06 02:25:46
【问题描述】:

我一直在尝试向 php 脚本发送 POST 请求,以更新 MySQL 数据库中表的值。我最近一直在使用 RetroFit,并用它为基于 POST 的操作发送了相当多的 POST 请求。我不知道我的问题是否会发生,因为我违反了建议使用 PUT 进行更新操作的 HTTP 最佳实践,但我也尝试从客户端发送 PUT 请求,尽管它具有相同的结果。当我检查它们时,数据库值没有改变。这是我从 RetroFit 发送 HTTP Post 请求的代码。

                    final JsonDataAPI API = RetroFitClient.getInstance().getAPI();
                    Map<String, String> voteParams = new HashMap<String, String>();
                    voteParams.put("pollID", String.valueOf(pollID));
                    voteParams.put("optText", rb1.getTag().toString());
                    Call <ArrayList<PollOpt>> voteCall = API.makeVote(voteParams);
                        voteCall.enqueue(new Callback<ArrayList<PollOpt>>() {
                            @Override
                            public void onResponse(Call<ArrayList<PollOpt>> call, Response<ArrayList<PollOpt>> response) {
                                if(!response.isSuccessful()){
                                    Toast.makeText(PollPage.this, "Vote Unsuccessful for vote 2", 
                                   Toast.LENGTH_SHORT).show();
                                }   else{
                                    Toast.makeText(PollPage.this, "Vote Successful for vote 2", 
                                  Toast.LENGTH_SHORT).show();
                                }
                            }

                            @Override
                            public void onFailure(Call<ArrayList<PollOpt>> call, Throwable t) {
                                Log.d("TAG", "Vote Failure: " + t.getMessage());
                                Log.d("TAG", "FailureURL rb2: " + call.request().url().toString());
                            }
                        });

请求的 URL 很好,它甚至会在 onFailure 函数中打印请求,因为没有响应而触发,尽管我不希望得到响应。

这也是发送请求的 PHP API 代码部分Vote.php

'

    method = $_SERVER['REQUEST_METHOD'];

    switch($method){

    case "POST":

    if(isset($_POST["optText"]) && isset($_POST["pollID"])){

        $optText = $_POST["optText"];
        $pollID = (int) $_POST["pollID"];

        $query = "UPDATE polloption SET frequency = frequency + 1 WHERE pollID = " . $pollID . " AND optText = '". $optText ."'";

        $conn = new mysqli($host, $user, $pass, $database);
    if ($conn->connect_error)
        die($conn->connect_error); 

        if(mysqli_query($conn, $query)){
            echo "Updated Poll Frequency";
        } else{
            echo "Failed to Update Poll Frequency";            
        }



    }

    break;'

我已经使用 AJAX 脚本测试了 PHP 代码,您可以在 AJAX 请求响应中看到 phps 回显数据,而在 Android 中,使用 GET 以外的方法发送 HTTP 请求并确定错误时基本上是在黑暗中工作必须使用 AJAX 请求单独测试每个文件。在使用不同参数多次使用 AJAX 脚本测试服务器后,我看不出为什么在通过 RetroFit 发送 POST 请求时频率值没有更新。

对此的任何建议将不胜感激!

【问题讨论】:

  • 您是否有机会尝试访问本地主机?
  • 不是这样的

标签: android http retrofit


【解决方案1】:

不要使用 isset($_POST["optText"]) && isset($_POST["pollID"]) 从基于 Json 的正文请求中获取值,只需使用

$post_body = file_get_contents('php://input');

对于php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 2021-02-01
    相关资源
    最近更新 更多