首页 > 解决方案 > Android - Volley 未发送我的 GET 或 POST 参数

问题描述

我正在构建一个 Android 应用程序,用于查询我的在线服务器以获取数据,登录信息就是其中之一。

我有这个登录功能,我在其中向我拥有的 php 脚本发出请求。

public void login(final String username, final String password, Context context, final requestHandler listener) {

    final String requestUrl = "http://www.my-url.com/folder/folder/folder/script.php";
    JSONObject object = new JSONObject();


    try {
        // TODO: handle loggedInUser authentication
        //input your API parameters
        object.put("user_identifier ", username);
        object.put("password", password);

    } catch (Exception e) {
        Log.e(TAG, "error logging in = " + e);
        new Result.Error(new IOException("Error logging in", e));
    }

    HashMap<String, String> params = new HashMap<>();
    params.put("user_identifier", username);
    params.put("password", password);
    params.put("Content-Type", "application/json");

    StringRequest sr = new StringRequest(Request.Method.POST, requestUrl,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.e("HttpClient", "success! response: " + response);
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("HttpClient", "error: " + error.toString());
            }
        })
    {
        @Override
        protected Map<String,String> getParams(){
            Map<String,String> params = new HashMap<>();
            params.put("user_identifier", username);
            params.put("password", "hello_World");
            return params;
        }

    };


    JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, requestUrl, new JSONObject(params),
            new Response.Listener<JSONObject>() {

                @Override public void onResponse(JSONObject response) {
                    //the response contains the result from the server
                    // a json string or any other object returned by your server
                    Log.e(TAG, "Response: " + response.toString());

                    GsonBuilder gsonBuilder = new GsonBuilder();
                    gsonBuilder.setDateFormat("yyyy/MM/dd hh:mm a");
                    gson = gsonBuilder.create();

                    ServerResponse serverResponse = gson.fromJson(response.toString(), ServerResponse.class);
                    Result<UserModel> result;

                    if(serverResponse.isSuccess()){
                        UserModel userModel = gson.fromJson(serverResponse.getData(), UserModel.class);

                        result = new Result.Success<>(userModel);
                        listener.passResult(result);

                    }
                    else {
                        result = new Result.Error(new IOException("Error code: " + serverResponse.getMessage()));
                    }

                    listener.passResult(result);


                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e(TAG, "volley error jsonObject = " + error);
                    error.printStackTrace(); //log the error resulting from the request for diagnosis/debugging
                }
            });

    Volley.newRequestQueue(context).add(jsonRequest);
    Volley.newRequestQueue(context).add(sr);

}

现在,PHP 将只获取请求,然后处理它。它返回一个 JSONObject,然后由我制作的 Android App 解析。请注意,我之前可以提出请求。但突然间,我得到一个空白响应,这导致解析 JSONObject 结果时出错。StringRequest 还返回一个长度为 0 的字符串。

很明显,有些不对劲。我使用 apirequest.io 测试了我的 PHP 脚本,我的脚本能够接收、处理和输出正确的结果。

很明显,我的安卓系统有问题。为了确保我的 PHP 运行良好,在处理输入之前,我有这个块:

print_r($_REQUEST);
var_dump($_REQUEST);
print_r($_POST);
var_dump($_POST);
print_r($_GET);
var_dump($_GET);            

但是当我再次运行登录功能时,我没有从我的服务器获得任何信息。转储$_REQUEST参数只会给出一个空白。请注意,当我使用 apirequest.io 时,PHP 脚本仍然可以正常运行。Android Volley 如何构建我的请求并将它们发送到服务器显然有些奇怪。

直到我硬编码 url 中的值,例如:requestUrl?name_1=value1&name2_value2..PHP 显示它能够接收$_GET请求中的参数。

这令人难以置信。

我现在很困惑,似乎 Volley 突然停止了正确构建我的请求,因此,我的参数被删除了。

有人可以指出我做错了什么吗?

标签: phpandroidandroid-volley

解决方案


推荐阅读