Страница 4 из 6

Справочные материалы и примеры App Inventor

Добавлено: 10 окт 2021, 21:48
feodor53
Phazz писал(а): 10 окт 2021, 16:55 что-то забуксовал я с приемом данных с json (
да все у вас прекрасно:
[spoiler]
последний1.png
[/spoiler]

Итак, добавляем на экран кнопку (переименовываем если надо - у меня переименована в "получить json"),
а также добавляем 4 элемента "Надпись". Почему 4 ? Просто у нас же в проекте flprog 4 json-тега: bool - str - float - int:
[spoiler]
0.png
[/spoiler]
создаем глобальную переменную где будем хранить полученный ответ от сервера
[spoiler]
1.png
[/spoiler]
настраиваем реакцию при нажатии кнопки: присваиваем url и отправляем запрос по этому url
[spoiler]
2.png
[/spoiler]
теперь когда получен текст, то присваиваем нашей созданной переменной значение из содержания ответа, обработав (декодировав текст) его при этом с помощью инструмента ".JsonTextDecodeWithDictionaries"
[spoiler]
3.png
[/spoiler]
теперь присваиваем каждой надписи на телефоне (у нас их 4) значения согласно json-тегам (bool - str - float - int)
[spoiler]
4.png
[/spoiler]
общий вид нашего приложения
[spoiler]
5-общий план.png
[/spoiler]
В результате имеем на экране телефона:
[spoiler]
последний2.png
[/spoiler]

проект для AI
[spoiler]
testing_json_server.7z
[/spoiler]
само приложение
[spoiler]
testing_json_server.7z
[/spoiler]
ну и курим справку по json:
http://ai2.appinventor.mit.edu/referenc ... -apis.html

Справочные материалы и примеры App Inventor

Добавлено: 10 окт 2021, 21:53
feodor53
мне понравились ваши json-блоки.
лучше чем мой xml вариант.
утащил их к себе в библиотеку :D

Справочные материалы и примеры App Inventor

Добавлено: 11 окт 2021, 09:00
Phazz
Это то понятно что работает, пытаюсь сделать в обратную сторону принимать на есп

Справочные материалы и примеры App Inventor

Добавлено: 11 окт 2021, 21:04
feodor53
Phazz писал(а): 11 окт 2021, 09:00 пытаюсь сделать в обратную сторону принимать на есп
а как принимать на есп?
это ж надо на ней веб-сервер поднимать получается?

Справочные материалы и примеры App Inventor

Добавлено: 11 окт 2021, 21:49
Phazz
[ref]feodor53[/ref], а разве он на есп не поднят?

Отправлено спустя 2 минуты 15 секунд:
В вашем же примере ходят данные в обе стороны

Справочные материалы и примеры App Inventor

Добавлено: 11 окт 2021, 21:51
feodor53
Phazz писал(а): 11 окт 2021, 21:49 а разве он на есп не поднят?
поднят.
но нам же надо передать полученное в deserializeJson(doc, client);

а как получить ?

Справочные материалы и примеры App Inventor

Добавлено: 11 окт 2021, 21:56
Phazz
Я пытался получить через client.read

Отправлено спустя 2 минуты :
С браузера идут данные при подключении, а с приложения тишина

Справочные материалы и примеры App Inventor

Добавлено: 11 окт 2021, 22:00
feodor53
[ref=#808080]Phazz[/ref],
а если так?
[spoiler]
1111.png
[/spoiler]
проект
[spoiler]
testing_json_server.7z
[/spoiler]

Справочные материалы и примеры App Inventor

Добавлено: 11 окт 2021, 22:07
feodor53
Phazz писал(а): 11 окт 2021, 21:56 Я пытался получить через client.read
а как это в коде выглядит?)

Справочные материалы и примеры App Inventor

Добавлено: 12 окт 2021, 10:09
Phazz
Как чтение с уарт. Завтра покажу

Отправлено спустя 11 часов 25 минут 42 секунды:
[ref]feodor53[/ref], соврал немного. Вот как это в коде выглядит.

Код: Выделить всё

if (client) 
    {
      client.setTimeout (10);
        String req = client.readStringUntil('%');
        Serial.println(req);
        client.flush();
        DeserializationError error = deserializeJson(doc1, req);
        // Test if parsing succeeds.
          if (error) 
        {
            Serial.print(F("deserializeJson() failed: "));
            Serial.println(error.f_str());
        }
        Serial.print(F("Sending: "));
        serializeJson(doc, Serial);
        Serial.println();
        client.println(F("HTTP/1.0 200 OK"));
        client.println(F("Content-Type: application/json"));
        client.println(F("Connection: close"));
        client.print(F("Content-Length: "));
        client.println(measureJsonPretty(doc));
        client.println();
        // Write JSON document
          serializeJsonPretty(doc, client);
        // Disconnect
          client.stop();
    }
Отправлено спустя 16 минут 10 секунд:
feodor53 писал(а): 11 окт 2021, 22:00 [ref=#808080]Phazz[/ref],
а если так?
[spoiler]
1111.png
[/spoiler]
проект
[spoiler]
testing_json_server.7z
[/spoiler]
Как всегда отлично :like:

Отправлено спустя 1 минуту 14 секунд:
Теперь нужно из приходящей строки вытащить данные и проект готов )

Справочные материалы и примеры App Inventor

Добавлено: 12 окт 2021, 10:12
Phazz
Вот пример строки

Код: Выделить всё

POST / HTTP/1.1
Content-Type: application/json
Content-Length: 58
User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.1.2; SM-N971N Build/N2G48C)
Host: 192.168.4.1:8089
Connection: Keep-Alive
Accept-Encoding: gzip

{"bool":"0","str":"test123","float":"9.990000","int":2223}

Справочные материалы и примеры App Inventor

Добавлено: 12 окт 2021, 10:19
feodor53
Phazz писал(а): 11 окт 2021, 21:56 Как всегда отлично
получилось таки принять на есп?
я вчера не осилил)
Phazz писал(а): 12 окт 2021, 10:09 deserializeJson(doc, client);
как я понимаю, нужно эту строку подставить в doc.
но это не точно)))))

Справочные материалы и примеры App Inventor

Добавлено: 12 окт 2021, 10:26
Phazz
feodor53 писал(а): 12 окт 2021, 10:19 как я понимаю, нужно эту строку подставить в doc.
но это не точно)))))
Я вставляю, пишет ошибку. Видимо нужно очистить от лишних данных

Отправлено спустя 47 секунд:
deserializeJson() failed: InvalidInput

Отправлено спустя 1 минуту 46 секунд:
А можно как-то отправлять чистый JSON?

Справочные материалы и примеры App Inventor

Добавлено: 12 окт 2021, 10:28
feodor53
Phazz писал(а): 12 окт 2021, 10:24 нужно очистить от лишних данных
имеете ввиду что нужно сначала убрать заголовки, юзер агента и т.п.?
я отчего то считал что библиотека Arduini.json.h сама это все делает...

Справочные материалы и примеры App Inventor

Добавлено: 12 окт 2021, 10:35
feodor53
feodor53 писал(а): 12 окт 2021, 10:28 А можно как-то отправлять чистый JSON?
но ведь в выше в моем блоке "прием ИЗ телефона" выдает чистый стринг. (без заголовка и прочего).
Получается что можно.
Что там, что здесь приходит http-post от телефона.

Справочные материалы и примеры App Inventor

Добавлено: 12 окт 2021, 10:37
feodor53
в крайнем случае "вручную" парсить средствами флпрог. или блок отдельный под это дело собрать.

хотя это как то не айс конечно.

Справочные материалы и примеры App Inventor

Добавлено: 12 окт 2021, 11:12
Phazz
[ref]feodor53[/ref], Даже в примере JSON парсят отдельно

Справочные материалы и примеры App Inventor

Добавлено: 12 окт 2021, 11:19
feodor53
здесь то мы ничего не парсим:
download/file.php?id=33387&mode=view
сразу данные без служебной инфы приходят.
и инструмент тот же самый используем http-post.

что то мы упускаем...

Справочные материалы и примеры App Inventor

Добавлено: 12 окт 2021, 17:31
feodor53
DeserializationError::Ok - это если Десериализация прошла успешно.

у нас же:
DeserializationError::InvalidInput
Ввод не распознается. Возможные причины:

1 ввод просто недействителен
2 ввод содержит комментарий, но поддержка отключена
3 ввод действителен, но ему предшествует что-то еще (см. ниже)
4 вы deserializeJson()дважды звонили в режиме нулевой копии
5 Если эта ошибка возникает в ответе HTTP, убедитесь, что ваша программа:

пропускает заголовки HTTP
использует HTTP версии 1.0 или обрабатывает фрагментированное кодирование передачи

Справочные материалы и примеры App Inventor

Добавлено: 12 окт 2021, 17:36
feodor53
feodor53 писал(а): 12 окт 2021, 17:31 String req = client.readStringUntil('%');
Serial.println(req);
но здесь то в (reg) мы получаем строку без заголовков http.

и подаем эту строку (reg) на deserializationJson(doc1,reg);

Получается что мы передаем Без заголовков. Но все равно не проходим десериалищацию...