Параметры сообщения строкового запроса Volley всегда равны нулю в php

Я отправляю строковый запрос POST с некоторыми параметрами, но в сценарии PHP я всегда получаю значение параметра как null. Когда я тестирую PHP с почтальоном, он работает нормально.

это мой код запроса залпа:

public void login(final String mPhone, final String mEmail, final String mPassword) {


        StringRequest stringRequest = new StringRequest(Request.Method.POST, URLs.LOGIN, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonObject = new JSONObject(response);
                    if (jsonObject.getBoolean("error")) {
                        String error = jsonObject.getString("message");
                        if (error.equals("new user")) {
                            registerUser();
                        } else {
                            showProgress(false);
                            Snackbar.make(mOtpView, error, Snackbar.LENGTH_SHORT).show();
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                showProgress(false);
                Snackbar.make(mOtpView, error.getMessage(), Snackbar.LENGTH_SHORT).show();
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put("phone", mPhone);
                params.put("email", mEmail);
                params.put("password", mPassword);

                return params;
            }
        };
        //Method to limit retry policy of request
        stringRequest.setRetryPolicy(
                new DefaultRetryPolicy(
                        DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2,
                        3,
                        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
                )
        );
        try {

            //Adding request to request queue
            RequestQueue requestQueue = Volley.newRequestQueue(this);
            requestQueue.add(stringRequest);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

а это мой PHP:

require_once 'DbConfig.php';

$response = array();

if (isset($_GET['apicall'])) {
    switch ($_GET['apicall']) {
        case 'login':

            $phone = $_POST['phone'];
            $email = $_POST['email'];
            $pass = $_POST['password'];

            echo $phone.$email.$pass;exit();

Я попытался добавить заголовок, переопределив getHeaders (), а также попытался переопределить getBodyContent (), но ничего не работает, а также приведенный выше код работает нормально, когда я использую его в localhost. Я проверил URL-адрес в порядке, потому что сценарий PHP в порядке, поскольку я тестировал его, повторяя другие вещи, которые он выполнял нормально.

проверьте, является ли этот $ _GET ['apicall'] нулевым

HamzaNig 10.12.2018 09:59

это может быть процесс, не входящий в эхо-запрос

HamzaNig 10.12.2018 09:59

также проверьте со стороны Android с помощью журнала, действительно ли вы отправляете данные или нет

Urvish rana 10.12.2018 10:06

@Urvishrana мой метод getParams () вызывает, инициализирует карту и успешно возвращает ее

Deepesh Tiwari 10.12.2018 10:51

@HamzaNig apicall не равно нулю, поскольку при повторении чего-либо еще он приходит в ответ, как есть

Deepesh Tiwari 10.12.2018 10:53

@DeepeshTiwari проверьте обрезку, это может быть пробел в $ _GET ['apicall']: switch (trim ($ _ GET ['apicall']))

HamzaNig 10.12.2018 11:02

если все еще та же проблема, попробуйте повторить что-нибудь, чтобы узнать, есть ли у вас доступ к регистру случая или нет

HamzaNig 10.12.2018 11:04

Код @HamzaNig под оператором switch выполняется, поэтому $ _GET ['apicall'] работает должным образом. в случае "логин": если я echo ("тест"); я получаю тест в ответ на android, так что это нормально, не знаю, почему этот код работает везде, но android ... тот же код работает, если я тестирую его с помощью localhost

Deepesh Tiwari 10.12.2018 11:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
706
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Обычно эта проблема может быть связана с добавлением к нему Content-Type charset = utf-8:

 params.put("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

Кредит: Залп-ПОСЛЕ-ПУСТОЙ

не сработало теперь не знаю, что делать, еще также попробовал добавить params.put ("Content-Type", "application / json; charset = utf-8"); но проблема всегда остается нулевой.

Deepesh Tiwari 11.12.2018 07:54

также пробовал настраиваемый запрос ... это тоже не сработало ... все работает нормально с почтальоном и localdb с Android, но не работает, когда файл размещен в Интернете, и я пытаюсь отправить туда запрос.

Deepesh Tiwari 11.12.2018 09:45

попробуйте вместо Request.Method.POST использовать Request.Method.Get, чтобы узнать, есть ли проблема на обоих, или просто опубликуйте

HamzaNig 11.12.2018 09:53

Вы только отправляете;

params.put("phone", mPhone); params.put("email", mEmail); params.put("password", mPassword);

Как насчет; params.put("apicall","YOu_API");

Я предполагаю, что apicall не установлен, поэтому значения будут нулевыми.

apicall - это заголовок, который соответствует URL-адресу, и я использую указанное в нем значение для выполнения правильного случая, то есть входа в систему, регистрации.

Deepesh Tiwari 10.12.2018 17:02
Ответ принят как подходящий

РЕШЕНО !!! Не могу думать об этом когда-либо !! на самом деле я использовал URL вроде: - http://www.example.com, но когда я попробовал http://example.com ... это сработало как шарм ... хотя спасибо всем за помощь !!

Другие вопросы по теме