Почему мой метод StringRequest всегда работает в методе onErrorResponse?
Я пытаюсь выполнить запрос POST от Android, чтобы вставить некоторую информацию в мой phpmyadmin
.
Что я использую
-
Slim
, чтобы выполнить соединение и запрос с базой данных, хранящейся в phpmyadmin.
- XAMPP для имитации локального сервера.
- Volley для использования запросов от Android.
Функция Slim post не дает мне никаких проблем, потому что, если я использую ее в режиме POST
в приложении Postman, данные вставляются правильно в базу данных.
URL может принимать два параметра, разделенных косой чертой /
. Вот один пример:
http://localhost:8000/insert/Peter/25
в который я вставляю нового пользователя с именем Peter и 25 лет в базу данных.
Проблемы возникают, когда я пытаюсь вызывать один и тот же URL с Android с помощью Volley, потому что он всегда идет к методу onErrorResponse
.
Это код, который я должен использовать для запроса от Android:
RequestQueue queue = Volley.newRequestQueue(getContext());
String url = "http://localhost:8000/insert/" + name + "/" + age;
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
Log.d("Response", "works well");
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Response", "" + error.getMessage());
}
}
);
queue.add(postRequest);
Но он всегда идет к методу onErrorResponse
.
Что я проверил
- То, что компьютер, на котором работает XAMPP, находится в том же WIFI, что и смартфон.
- Это изменение локального хоста для IP-адреса моего компьютера также не изменяет результат.
UPDATE:
Я заметил, что я использовал IP-адаптер Ethernet вместо WIFI на URL-адресе.
Теперь я могу видеть на веб-странице браузера смартфона XAMPP по умолчанию, если я установил http://192.168.x.x
(IP моего WIFI) на url, но у меня все еще есть проблема, о которой я упоминал выше, потому что, если я устанавливаю http://192.168.x.x:8000/insert/Peter/25
, url не распознается с помощью смартфона.
Я думаю, что проблема может быть связана с тем, что я использую встроенный сервер PHP в качестве Slim documentation
. Я использую следующую команду:
php -S localhost:8000
поэтому я думаю, что проблема может быть сгенерирована здесь, но я не уверен, как ее решить.
Что мне не хватает?
Спасибо заранее!
Ответы
Ответ 1
Наконец, я замечаю, в чем была моя проблема. Я собираюсь поделиться теми моментами, в которых я боролся.
-
Прежде всего, мне не нужно было использовать встроенный PHP-сервер, потому что это было необязательно.
-
Во-вторых, и самое главное, я также должен был использовать имя файла, в котором хранятся функции Slim (пользовательские функции, которые я создал) на URL.
-
В-третьих, мне пришлось использовать IP-адрес компьютера, на котором был запущен XAMPP, чтобы мобильный телефон мог получить к нему доступ вместо localhost
(который ссылался на localhost
мобильного телефона, чтобы он никогда не работают).
-
В-четвертых, оба устройства (мобильный телефон и компьютер) были подключены к той же сети WIFI, поэтому, когда вы запускаете свой XAMPP на своем компьютере, мобильный телефон может получить к нему доступ.
Итак, окончательный url, который я должен был использовать, был:
http://192.168.x.x/application/index.php/insert/Peter/25
где вам нужно заменить 192.168.x.x
IP-сетью WIFI вашего компьютера и application
на имя папки, в которой вы используете Slim
.
Ответ 2
Вы также можете сделать это
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
Log.d("Response", "works well");
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Response", "" + error.getMessage());
}
}
@Override
public String getBodyContentType() {
return "application/x-www-form-urlencoded; charset=UTF-8";
}
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("name", "Atif");
params.put("age", "27");
return params;
}
);
Ответ 3
Вы привязываете внутренний веб-сервер PHP к localhost
т.е. 127.0.0.1
. Доступ к нему с любого внешнего устройства невозможен. Чтобы связать веб-сервер PHP с внешним IP-адресом 192.168.x.x
, запустите его с помощью.
$ php -S 192.168.x.x:8000
Обязательно замените часть .x.x
на фактические номера вашего IP-адреса. Вы также должны убедиться, что ваше Android-устройство подключено к той же сети 192.168.x
.
После этого ваше устройство Android должно сделать запрос 192.168.x.x:8000
. Теперь он пытается подключиться к localhost
т.е. сам.
Если вы не используете веб-сервер PHP в своем Android-устройстве, 8000
подключение к localhost:8000
не будет работать.
Ответ 4
Вместо того, чтобы передавать имя и возраст URL-адресу, передайте их так (для этого сделайте достаточные изменения в своем веб-сервисе)
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("name", "Atif");
params.put("age", "27");
return params;
}
См. подробный пример здесь
Ответ 5
localhost может использоваться для той же системы, из которой запускается xampp.
Если вы хотите подключить его через какое-то другое устройство, например, телефон Android, вам нужно поместить общедоступный IP-адрес, перейдите в командную строку и введите
ipconfig
Проверьте IPv4-адрес для общедоступного IP-адреса.