Я отправляю строковый запрос 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 в порядке, поскольку я тестировал его, повторяя другие вещи, которые он выполнял нормально.
это может быть процесс, не входящий в эхо-запрос
также проверьте со стороны Android с помощью журнала, действительно ли вы отправляете данные или нет
@Urvishrana мой метод getParams () вызывает, инициализирует карту и успешно возвращает ее
@HamzaNig apicall не равно нулю, поскольку при повторении чего-либо еще он приходит в ответ, как есть
@DeepeshTiwari проверьте обрезку, это может быть пробел в $ _GET ['apicall']: switch (trim ($ _ GET ['apicall']))
если все еще та же проблема, попробуйте повторить что-нибудь, чтобы узнать, есть ли у вас доступ к регистру случая или нет
Код @HamzaNig под оператором switch выполняется, поэтому $ _GET ['apicall'] работает должным образом. в случае "логин": если я echo ("тест"); я получаю тест в ответ на android, так что это нормально, не знаю, почему этот код работает везде, но android ... тот же код работает, если я тестирую его с помощью localhost






Обычно эта проблема может быть связана с добавлением к нему 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"); но проблема всегда остается нулевой.
также пробовал настраиваемый запрос ... это тоже не сработало ... все работает нормально с почтальоном и localdb с Android, но не работает, когда файл размещен в Интернете, и я пытаюсь отправить туда запрос.
попробуйте вместо Request.Method.POST использовать Request.Method.Get, чтобы узнать, есть ли проблема на обоих, или просто опубликуйте
Вы только отправляете;
params.put("phone", mPhone);
params.put("email", mEmail);
params.put("password", mPassword);
Как насчет;
params.put("apicall","YOu_API");
Я предполагаю, что apicall не установлен, поэтому значения будут нулевыми.
apicall - это заголовок, который соответствует URL-адресу, и я использую указанное в нем значение для выполнения правильного случая, то есть входа в систему, регистрации.
РЕШЕНО !!! Не могу думать об этом когда-либо !! на самом деле я использовал URL вроде: - http://www.example.com, но когда я попробовал http://example.com ... это сработало как шарм ... хотя спасибо всем за помощь !!
проверьте, является ли этот $ _GET ['apicall'] нулевым