Получить JSONArray с помощью StringRequest из Android

0

Я пытаюсь заполучить JSONArray, используя StringRequest в Android вместе с POST -method.

PHP-скрипт написан как:

$statement = mysqli_prepare($con, "SELECT * FROM tickets WHERE user_id > 5 AND completed = 1");
    mysqli_stmt_bind_param($statement, "i", $UID);
    mysqli_stmt_execute($statement);

    mysqli_stmt_store_result($statement);
    mysqli_stmt_bind_result($statement, $user_id, $beacon_id, $timeFrom, $timeTo, $completed);



    $jsonObject = array();
    $response = array();

    while($status = mysqli_stmt_fetch($statement)){
            $jsonObject = null;

            $jsonObject["beacon_id"]= $beacon_id;
            $jsonObject["timeFrom"]= $timeFrom;
            $jsonObject["timeTo"]= $timeTo;

            $response[] = $jsonObject;
    }

echo json_encode($response);?>

Доступ к веб-странице с помощью php-скрипта, следующий JSONArray "эхо":

[{"beacon_id":10,"timeFrom":"2018-02-14 13:07:11","timeTo":"2018-02-14 14:32:53"},{"beacon_id":3,"timeFrom":"2018-02-24 13:33:37","timeTo":"2018-02-24 13:33:47"}]

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

Когда я пытаюсь получить доступ к этому JSONArray через StringRequest в Android Studio (Java), я не получаю никаких результатов...

Код StringRequest:

public class HistoryRequest extends StringRequest {
    private static final String HISTORY_REQUEST_URL = "http://myURL.../myPHPfile.php";
    private Map<String, String> params;

    public HistoryRequest(String user_id, String instanceID, Response.Listener<String> listener) {
        super(Method.POST, HISTORY_REQUEST_URL, listener, null);
        params = new HashMap<>();
        params.put("user_id", user_id);
        params.put("instanceID", instanceID);
}

    @Override
    public Map<String, String> getParams() {return params;}
}

Функция ResponseListener в MainActivity написана так:

Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
    JSONArray jsonArray = new JSONArray(response);
    for(int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.getJSONObject(i);

        String timeFrom = jsonObject.getString("timeFrom");
        String timeTo = jsonObject.getString("timeTo");

        textviewFrom.append(timeFrom);
        textviewTo.append(timeTo);
        }
    }
};

Любые советы, почему я не могу создать JSONArray из String, который на URL-странице веб-страницы выглядит как красивый JSONArray?

Заранее спасибо!

ОБНОВИТЬ:

После перехода на JSONArrayRequest вместо StringRequest, я могу получить данные, если я изменю часть MySQL php-скрипта на что-то статическое, например:

SELECT * FROM tickets;

Затем я могу отобразить все записи. Но я, как правило, посылаю 1 параметр на сервер (user_id), чтобы я мог фильтровать записи на основе пользователя, который вошел в систему. [SELECT * FROM tickets where user_id =?], Как традиционный POST -method....

Кто-то, кто знает, что делать? Прочитайте несколько мест, которые вы не можете использовать @Override для getParams() -method для этого...

РЕШИТЬ:

Я решил проблему, введя ключевое значение (user_id) в URL.

//Instead of POST:
$user_id = $_POST["user_id"];

// I use SERVER to get the value after ? in the URL:
$user_id = $_SERVER['QUERY_STRING'];

Выполнение этого с помощью следующего java-кода:

public class HistoryRequest extends JsonArrayRequest {
private static final String HISTORY_REQUEST_URL = "http://myURLorIPaddress/getHistory.php?";

    public HistoryRequest(String UID, Response.Listener<JSONArray> listener) throws JSONException {
        super(Method.POST, HISTORY_REQUEST_URL + UID,null, listener, null);
}
}

Это позволило отфильтровать результат на основе user_id и работать как шарм: D

  • 0
    Можете ли вы напечатать полученный ответ и проверить строку?
  • 0
    Пожалуйста, посмотрите на ответ ниже :)
Показать ещё 1 комментарий
Теги:

2 ответа

0

Я работаю в аналогичном проекте, проверяли ли вы какие-то нулевые записи? Я думаю, проблема может быть там, проверив ваше изображение LogCat.

Проверка использования функции isNull() может быть хорошей идеей. https://processing.org/reference/JSONObject_isNull_.html

0

Я ничего не могу напечатать, но я вижу, что библиотека Volley жалуется на некоторые внешние ошибки (ничего не говорится о моем коде). Log.i("OnResponseLog", ответ) ничего не дает.

Изображение ошибки из LogCat:

Ещё вопросы

Сообщество Overcoder
Наверх
Меню