Android Volley POST请求:在服务器端获取GET请求方法(php)

2023-12-10

我正在制作一个 Android 应用程序,需要将 Post 请求发送到我的服务器,并且确实需要一些帮助! 我一直在尝试使用 android Volley 提出这些请求。我在这里阅读了很多相关问题以及有关 android Volley 的各种文档来源,但是当我设法提出请求时,我不可能在服务器端以正确的方式接收发布的数据,而且我不知道我做错了什么... 我尝试过字符串请求压倒性的获取参数()和定制Json对象请求我的数据作为范围。我在服务器端收到两个请求的不同结果,但我仍然无法以正确的方式捕获它。

在我的服务器端我的调试PHP file是这样的:

$content = file_get_contents("php://input");
$string = 'fileGetContents: ';
$json = json_decode($content, TRUE);
$string = 'fileGetContents: ';
$string .= $content;
$string .= ' -- json encoded: ';
$string .= json_encode($json);
$string .= ' -- Request Method: ';
$string .= $_SERVER['REQUEST_METHOD'];
$string .= ' -- $_REQUEST: ';
$string .= json_encode($_REQUEST);
$string .= ' -- $_POST: ';
$string .= json_encode($_POST);
$string .= ' -- user: ';
$string .= json_encode($_POST["user"]);
$string .= ' -- $_GET: ';
$string .= json_encode($_GET);
$string .= ' -- $_FORM: ';
$string .= json_encode($_FORM);
$array["ans"] = $string;
echo json_encode($array);

由于我得到的回复总是空的,我也尝试将我的请求发送到http://httpbin.org/post这给了我有趣的信息。

所以与第一个字符串请求我这样做:

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, "myServer.com/postRequest.php",
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    displayTheResponse(response);
                 }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(RegisterActivity.this,error.toString(),Toast.LENGTH_LONG).show();
                }
            }){
        @Override
        protected Map<String,String> getParams(){
            Map<String,String> params = new HashMap<String, String>();
            params.put("user", "test");
            params.put("pass", "passtest");
            return params;
        }

    };
    requestQueue.add(stringRequest);

我从我的服务器得到这个答案:

{"ans":"fileGetContents:  -- json encoded: null -- Request Method: GET -- $_REQUEST: [] -- $_POST: [] -- user: null -- $_GET: []"}

从 httpbin.org 我得到:

{   "args": {},
    "data": "",
    "files": {},
    "form": {     "pass": "passtest",      "user": "test"   },
    "headers": {     "Accept-Encoding": "gzip",      "Content-Length": "24",      "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",      "Host": "httpbin.org",      "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 7.1; Android SDK built for x86 Build/NPF26K)"   },
    "json": null,
    "origin": "104.221.22.144",
    "url": "http://httpbin.org/post" 
}

我可以看到信息实际上是发送的,但不是作为 POST 数据接收的,而是作为表单数据接收的,我真的不知道它是什么或如何从 PHP 接收它......

然后在我的第二个Json对象请求事情是这样的:

    Map<String, String> jsonParams = new HashMap<String, String>();
    jsonParams.put("user", "test");

    JsonObjectRequest myRequest = new JsonObjectRequest(
            Request.Method.POST,
            "myServer.com/postTest.php",
            new JSONObject(jsonParams),
            new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                displayResponse(response.toString(4));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        },
            new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(LogInActivity.this, "Error "+error.getMessage(), Toast.LENGTH_LONG).show();
            fm.popBackStack();
        }
    });
    requestQueue.add(myRequest);

从 httpbin.org 我得到:

{     "args": {},
     "data": "{\"user\":\"test\"}",
     "files": {},
     "form": {},
     "headers": {         "Accept-Encoding": "gzip",         "Content-Length": "15",         "Content-Type": "application\/json; charset=utf-8",         "Host": "httpbin.org",         "User-Agent": "Dalvik\/2.1.0 (Linux; U; Android 7.1; Android SDK built for x86 Build\/NPF26K)"     },
     "json": {         "user": "test"     },
     "origin": "104.221.22.144",
     "url": "http:\/\/httpbin.org\/post" 
}

在这里我们看到现在数据显示在“data”和“json”而不是“form”中,但是从我的服务器我仍然得到相同的空响应,所以我猜测我的问题来自服务器端PHP代码我是使用。我还注意到“$_SERVER['REQUEST_METHOD']”正在返回“GET”。

我尝试了很多不同的方法来提出 Volley 请求,但我不知道还能做什么。我尝试过创建一个辅助类、自定义 JsonObjectRequest、重写 getHeaders(),甚至使用 AppController 将请求添加到队列中...我想我对 Post 请求的工作方式没有足够的了解,我很新随着android的开发。

我真的非常感谢任何帮助我了解我应该如何使用 Volley POST 方法在服务器端接收数据的帮助。非常感谢您的宝贵时间!


这是您可以用来制作的代码POST请求与排球库在安卓中。假设您在应用程序 build.gradle 文件中导入库:

dependencies{
     .... 
     implementation 'com.android.volley:volley:1.1.0'
     .....
 }

以下代码可以作为一些例行任务放入方法中来执行 POST 请求

String requestUrl = "http://myapi.com/api/postresource.php";
StringRequest stringRequest = new StringRequest(Request.Method.POST, requestUrl, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        Log.e("Volley Result", ""+response); //the response contains the result from the server, a json string or any other object returned by your server

    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        error.printStackTrace(); //log the error resulting from the request for diagnosis/debugging

    }
}){

    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        Map<String, String> postMap = new HashMap<>();
        postMap.put("param1", "value1");
        postMap.put("param2", value2);
        //..... Add as many key value pairs in the map as necessary for your request
        return postMap;
    }
};
//make the request to your server as indicated in your request url
Volley.newRequestQueue(getContext()).add(stringRequest);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Volley POST请求:在服务器端获取GET请求方法(php) 的相关文章

随机推荐

  • 在 Visual C++ 中根据文件内容设置预处理器定义

    我的项目中有一个文件 其中包含项目版本号 我必须将此文件的内容用作我的代码中的预处理器定义 我需要的是以某种方式将文件中的值作为 D 参数传递给编译器 我尝试添加预处理器定义 VERSION Version 并在预构建步骤中设置版本环境变量
  • 数据压缩如何比索引更有效地提高搜索性能?

    对于我们的应用程序 我们保留由三个整数列 源 类型和时间 索引的大量数据 加载大量数据可能需要一些时间 我们已经实施了各种措施来减少大型查询必须搜索和加载的数据量 例如为不需要高分辨率的查询存储更大的粒度 时间 明智的 当在我们的备份存档中
  • Ajax get/posts 后 IE 不刷新

    我有一个小问题 我不知道如何处理 我写了一些 jQuery post gets 它们在 FF Opera 和 Chrome 中运行良好 但是 当从资源管理器 任何版本 运行时 请求中的更新内容不会加载到浏览器中 我使用了开发人员工具并调试了
  • sed 使用正则表达式

    所以基本上我有一个包含 1500 个名字的原始列表 每个名字都有一个 4 位数字 我有另一个文件 其中包含这 1500 个姓名中的 200 个姓名以及与其关联的新 4 位数字 我需要用这个新号码替换旧号码 我有一个文件original tx
  • 在 theano 中优化卷积时收到断言错误

    我正在尝试运行这段代码 x set np random rand 100 100 100 x T dtensor3 x inp x reshape 100 1 100 100 W stdDev np sqrt 2 3 3 2 W thean
  • 谷歌项目托管svn提交问题

    当我尝试使用 svn commit 提交代码时 它返回一个错误 svn 提交失败 详细信息如下 svn 服务器发送了意外的返回值 405方法不允许 响应 MKACTIVITY 请求 svn svn act acf5cd6f e8d7 476
  • Wix升级版本

    我正在尝试做教程 检查老歌 https www firegiant com wix tutorial upgrades and modularization checking for oldies
  • 谷歌分析 Cookie

    在我的浏览器中 如果我拒绝创建 cookie 则 cookie 会按名称 utma utmb 等创建 我认为此 cookie 用于谷歌分析 任何人都知道谷歌如何创建此 cookie 即使浏览器不支持 cookie 创建 谢谢 是的 这些是
  • 毫无例外地编写 C++ 吗?

    这个答案提到了两种处理非异常安全的 C 库 例如 Qt 的方法 将其隔离在异常安全包装器中 放弃例外并适应其风格 答案详细介绍了第一个选项 但第二个选项的后果是什么 放弃例外 当毫无例外地编写C 时 该语言的使用是如何受到限制的 例如 标准
  • Windows XP批处理文件连接

    我正在尝试完成以下荒谬的任务 我有一个文本文件 其中包含一组完全限定的文件名 我想迭代该文件并将每一行附加到一个公共变量 该变量可以传递给命令行工具 例如 该文件可能是 C dir test txt C WINDOWS test2 txt
  • 如何在 JOINED 表中使用 FIND_IN_SET?

    我有 2 张桌子 user 注册献血者的姓名及其血型 blood 包含血型和血液相容性 例如 血液为5 A 可以接受5 A 和6 O 的献血 我必须建立一个搜索表单来检索潜在的献血者 该表格允许用户搜索特定血型的捐献者 如果我搜索血型 5
  • 从套接字接收的流是否仅限于单个发送命令?

    我目前正在开发一个多线程应用程序 我使用以下 简化的 代码接收数据 private void BeginReceiveCallback IAsyncResult ar bytesReceived this Socket EndReceive
  • 具有可变时间的动画

    我有轨迹数据 其中每辆车都有自己的启动时间 每辆车都是动画中的一个点 因此 在数据集中 每一行都有坐标点 x y 和时间戳 所以 固定的时间间隔对我来说不起作用 我尝试过loop and sleep但它不显示动画 而只显示第一个结果 但如果
  • 将扩展 NextPage 类型分配给页面组件时出现类型错误

    我收到类型错误const Page如下面的屏幕截图和代码块所示 Type props Props JSX Element getLayout page ReactElement
  • javax.crypto.BadPaddingException:未知的块类型

    我正在尝试模拟非对称密钥系统 我使用以下代码来生成密钥对 加密 解密密码 我有一个分布式环境 目前我将生成的密钥保存在文件系统中 我知道这并不安全 但它只是用于测试目的 private static SecureRandom random
  • Pandas 和 PanelOLS:仅支持 2 级多重索引

    我有一个像这样的数据框 year fcode y x 0 1987 410032 NaN 0 1 1988 410032 NaN 0 2 1989 410032 NaN 0 3 1987 410440 NaN 0 4 1988 410440
  • 如何在JavaCC中实现JavaScript/ECMAScript“这里没有LineTerminator”规则?

    我继续致力于我的JavaCC语法 for ECMAScript 5 1 实际上进展顺利 我想我现在已经涵盖了大部分表达方式 我现在有两个问题 两个问题都与自动分号插入 7 9 1 有关 这是其中之一 该规范定义了以下生产 PostfixEx
  • Winforms:插入符号位置的屏幕位置

    如何找到标准 Winforms TextBox 的插入符的屏幕位置 您只能使用本机互操作来完成此操作 获取插入符位置 DllImport user32 dll return MarshalAs UnmanagedType Bool stat
  • ^ 运算符对 BOOL 有何作用?

    这句话是什么意思呢 isChecked isChecked 1 isChecked is a BOOL 是异或运算 因此 0 翻转为 1 1 翻转为 0 结果应该是一样的isChecked isChecked
  • Android Volley POST请求:在服务器端获取GET请求方法(php)

    我正在制作一个 Android 应用程序 需要将 Post 请求发送到我的服务器 并且确实需要一些帮助 我一直在尝试使用 android Volley 提出这些请求 我在这里阅读了很多相关问题以及有关 android Volley 的各种文