Я реализую взаимодействие Android-MySQL с PHP-скриптами. Скрипт отлично работает, когда я запускал его на своем ноутбуке.
Когда я пытался обработать значение, возвращаемое из сценариев PHP (возвращаемое echo) в моем приложении для Android, оказалось, что был возвращен весь необработанный сценарий PHP.
Я использовал Genymotion в качестве эмулятора, и в моем коде я установил URL-адрес 10.0.3.2.
Пока я пытался посетить страницу PHP с помощью Genymotion (10.0.3.2/test.php), браузер также загрузил необработанный скрипт.
Хотя я думаю, что это больше похоже на проблему с портом / конфигурацией, ниже приведены мои сценарии PHP и фрагмент кода Android.
PHP:
<?php
$db_name = "demo";
$mysql_username = "root";
$mysql_password = "password";
$server_name = "127.0.0.1";
$sql_query = "select * from table1;";
// establish connection to mysql database
$con = mysqli_connect($server_name, $mysql_username, $mysql_password,
$db_name);
$result = mysqli_query($con, $sql_query);
$return_arr = array();
while ($row = mysqli_fetch_array($result))
{
$return_arr[] = array(
'id' => $row['id'],
'size' => $row['size'],
'material' => $row['material'],
'date' => $row['date']
);
}
header('Content-Type: application/json');
echo json_encode(array("server_response"=>$return_arr));
mysqli_close($con);
?>
Android:
System.out.println («нет!»);
StringRequest stringRequest = new StringRequest(Request.Method.POST, json_url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
System.out.println(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
queueVolley.add(stringRequest);
Вопрос в том, как заставить PHP-скрипт возвращать правильные данные в Android? Он работал на MacBook Pro с Mojave OS.
Спасибо!
@ miken32, привет Майк, мой PHP-скрипт действительно работает в моем собственном браузере ноутбука, он просто не работает с кодом и эмулятором Android. Я проверил принятый ответ в этой ветке, и это не совсем мой случай.
Если ваш сервер возвращает код PHP, он не настроен должным образом и не имеет ничего общего с клиентской стороной.
@ miken32, но он не возвращает PHP-код и отлично работает, когда я захожу в него на своем ноутбуке.
К какому URL вы обращаетесь?
на моем ноутбуке: localhost: 8080 / test.php, в коде Android и в браузере Android: 10.0.3.2/test.php
Затем сервер, работающий на порту 8080, и сервер, работающий на порту 80, должны быть настроены по-другому.
Не могли бы вы уточнить немного подробнее? Когда я захожу на 10.0.3.2:80 на стороне Android, он был направлен на 10.0.3.2 и показывает «Работает».
Я не знаю, какая у вас настройка, поэтому я не могу сказать больше, чем то, что ваш веб-сервер настроен неправильно. «Работает» - это статическая страница, поставляемая с Apache. Ваш веб-сервер работает, но не настроен для обслуживания PHP.
Если вы используете localhost: 8080 / test.php на ноутбуке, вы должны использовать 10.0.3.2:8080/test.php в эмуляторе. Используйте везде один и тот же порт 8080.
Я выполнил онлайн-инструкцию. Перейдите в / Library / WebServer / Documents / the_folder_for_php_files и запустите php -S localhost: 8080
@Joni 10.0.3.2:8080 показывает "ERR_CONNECTION_REFUSED"
Перезагрузите php-сервер с помощью php -S 0:8080. Либо сервер больше не работает, либо эмулятор пытается подключиться к неправильному локальному IP-адресу, в любом случае привязка ко всем адресам (ip 0.0.0.0) должна помочь
@Joni omg, это сработало! Не могли бы вы объяснить, почему это работает? Это потому, что теперь он прослушивает все порты с 0-8080?
Скорее он прослушивает порт 8080 на всех IP-адресах, настроенных на вашем компьютере. 0 - это сокращение от 0.0.0.0 (en.m.wikipedia.org/wiki/0.0.0.0)






Возможный дубликат Код PHP не выполняется, вместо этого код отображается на странице