Страница 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 вариант.
утащил их к себе в библиотеку

Справочные материалы и примеры 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]
Как всегда отлично
Отправлено спустя 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);
Получается что мы передаем Без заголовков. Но все равно не проходим десериалищацию...