Нет ответа при использовании Volley в Android с PHP API. (Android) (PHP) (Volley)

91
10

Я пытаюсь создать PHP API для моего приложения Android для использования. Я пытаюсь использовать Volley для обработки моих HTTP-запросов. Я возвращаю строку JSON в своем PHP-скрипте, но Volley получает ответ "status = ok".

Вот часть, использующая Volley из моего приложения для Android.

            //Make json string request
StringRequest strReq = new StringRequest(Request.Method.GET,
url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
txtDisplay.setText(response);
System.out.println(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error){
System.out.println(error);
}
});

Вот мой PHP-скрипт.

<?php
require($_SERVER["DOCUMENT_ROOT"] . "/resources/connection.php");

header('Content-type: application/json');

$response["success"] = 1;
$response["message"] = "Hello World! Database connection has been established!";
die(json_encode($response));
?>

Я не понимаю, почему единственный ответ, который я получаю, это "status = ok". Я предполагаю, что это связано с кодом заголовка HTTP-ответа 200 OK, но я не знаю. Что я делаю не так?

спросил(а) 2014-07-18T02:03:00+04:00 6 лет, 3 месяца назад
1
Решение
59

API размещался на моем компьютере localhost. Итак, URL, который я использовал, был localhost. Однако я не понимал, что устройство Android не может напрямую связываться с машиной localhost. Если вы вызываете localhost на Android-устройстве, он ссылается на собственный веб-сервер локального хоста устройства.

Чтобы обойти это, просто используйте свой IP-адрес устройства и порт, на котором запущен API. Устройство и устройство Android должны находиться в одной сети. Если вы используете App Engine, вам также нужно настроить App Engine на использование IP-адреса вместо локального.

ответил(а) 2014-07-22T23:01:00+04:00 6 лет, 2 месяца назад
42

Попробуйте добавить заголовок Content-Type в свой запрос


           StringRequest strReq = new StringRequest(Request.Method.GET,
url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
txtDisplay.setText(response);
System.out.println(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error){
System.out.println(error);
}
}){

/**
* Passing some request headers
* */
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
return headers;
}
};

ответил(а) 2014-07-18T02:35:00+04:00 6 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема