Android - залп не отправляет мои параметры GET или POST - PullRequest
0 голосов
/ 13 января 2020

Я создаю 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, которое я создал. Пожалуйста, обратите внимание, что я мог делать запросы раньше. Но неожиданно я получаю пустой ответ, который привел к ошибкам при разборе результата JSONObject. StringRequest также возвращает строку длиной 0

1007 * Очевидно, что-то не так. Я использовал apirequest.io для тестирования моего PHP сценария, и мой сценарий может получать, обрабатывать и выводить правильные результаты.

Очевидно, что с моим Android что-то не так. Чтобы убедиться, что мой PHP работает нормально, у меня есть этот блок перед обработкой ввода:

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

Но когда я снова запускаю функцию входа в систему, я ничего не получаю от своего сервер. Сброс параметра $_REQUEST просто дает пробел. Может быть полезно отметить, что сценарий PHP все еще функционирует, как и предполагалось, когда я использую apirequest.io. Совершенно очевидно, что Android Volley создает мои запросы и отправляет их на сервер.

Пока я жестко не закодирую значение в URL-адресе, что-то вроде: requestUrl?name_1=value1&name2_value2.., что PHP показывает, что ему удалось получить параметры в запросе $_GET.

Это ошеломляет.

Теперь я в замешательстве, кажется, что Волей неожиданно просто перестал правильно составлять мой запрос, следовательно, мои параметры были сброшены.

Может кто-нибудь указать, что я делаю не так?

...