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

Документация, уроки, расширения

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#61

Сообщение feodor53 » 10.10.2021{, 21:48}

Phazz писал(а):
10.10.2021{, 16:55}
что-то забуксовал я с приемом данных с json (
да все у вас прекрасно:
СпойлерПоказать
последний1.png
Итак, добавляем на экран кнопку (переименовываем если надо - у меня переименована в "получить json"),
а также добавляем 4 элемента "Надпись". Почему 4 ? Просто у нас же в проекте flprog 4 json-тега: bool - str - float - int:
СпойлерПоказать
0.png
создаем глобальную переменную где будем хранить полученный ответ от сервера
СпойлерПоказать
1.png
настраиваем реакцию при нажатии кнопки: присваиваем url и отправляем запрос по этому url
СпойлерПоказать
2.png
теперь когда получен текст, то присваиваем нашей созданной переменной значение из содержания ответа, обработав (декодировав текст) его при этом с помощью инструмента ".JsonTextDecodeWithDictionaries"
СпойлерПоказать
3.png
теперь присваиваем каждой надписи на телефоне (у нас их 4) значения согласно json-тегам (bool - str - float - int)
СпойлерПоказать
4.png
общий вид нашего приложения
СпойлерПоказать
5-общий план.png
В результате имеем на экране телефона:
СпойлерПоказать
последний2.png
проект для AI
СпойлерПоказать
testing_json_server.7z
само приложение
СпойлерПоказать
testing_json_server.7z
ну и курим справку по json:
http://ai2.appinventor.mit.edu/referenc ... -apis.html
Для скачивания вложений Вы должны быть зарегистрированы.
Последний раз редактировалось feodor53 10.10.2021{, 22:35}, всего редактировалось 2 раза.

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#62

Сообщение feodor53 » 10.10.2021{, 21:53}

мне понравились ваши json-блоки.
лучше чем мой xml вариант.
утащил их к себе в библиотеку :D

Аватара пользователя
Phazz
Полковник
Сообщения: 1744
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 150
Откуда: Сургут
Имя: Анатолий

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

#63

Сообщение Phazz » 11.10.2021{, 09:00}

Это то понятно что работает, пытаюсь сделать в обратную сторону принимать на есп

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#64

Сообщение feodor53 » 11.10.2021{, 21:04}

Phazz писал(а):
11.10.2021{, 09:00}
пытаюсь сделать в обратную сторону принимать на есп
а как принимать на есп?
это ж надо на ней веб-сервер поднимать получается?

Аватара пользователя
Phazz
Полковник
Сообщения: 1744
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 150
Откуда: Сургут
Имя: Анатолий

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

#65

Сообщение Phazz » 11.10.2021{, 21:46}

feodor53, а разве он на есп не поднят?

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

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#66

Сообщение feodor53 » 11.10.2021{, 21:51}

Phazz писал(а):
11.10.2021{, 21:49}
а разве он на есп не поднят?
поднят.
но нам же надо передать полученное в deserializeJson(doc, client);

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

Аватара пользователя
Phazz
Полковник
Сообщения: 1744
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 150
Откуда: Сургут
Имя: Анатолий

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

#67

Сообщение Phazz » 11.10.2021{, 21:54}

Я пытался получить через client.read

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

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#68

Сообщение feodor53 » 11.10.2021{, 22:00}

Phazz,
а если так?
СпойлерПоказать
1111.png
проект
СпойлерПоказать
testing_json_server.7z
Для скачивания вложений Вы должны быть зарегистрированы.

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#69

Сообщение feodor53 » 11.10.2021{, 22:07}

Phazz писал(а):
11.10.2021{, 21:56}
Я пытался получить через client.read
а как это в коде выглядит?)

Аватара пользователя
Phazz
Полковник
Сообщения: 1744
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 150
Откуда: Сургут
Имя: Анатолий

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

#70

Сообщение Phazz » 11.10.2021{, 22:26}

Как чтение с уарт. Завтра покажу

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

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

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.10.2021{, 22:00}
Phazz,
а если так?
СпойлерПоказать
1111.png
проект
СпойлерПоказать
testing_json_server.7z
Как всегда отлично :like:

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

Аватара пользователя
Phazz
Полковник
Сообщения: 1744
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 150
Откуда: Сургут
Имя: Анатолий

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

#71

Сообщение Phazz » 12.10.2021{, 10:12}

Вот пример строки

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

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}

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#72

Сообщение feodor53 » 12.10.2021{, 10:19}

Phazz писал(а):
11.10.2021{, 21:56}
Как всегда отлично
получилось таки принять на есп?
я вчера не осилил)
Phazz писал(а):
12.10.2021{, 10:09}
deserializeJson(doc, client);
как я понимаю, нужно эту строку подставить в doc.
но это не точно)))))

Аватара пользователя
Phazz
Полковник
Сообщения: 1744
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 150
Откуда: Сургут
Имя: Анатолий

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

#73

Сообщение Phazz » 12.10.2021{, 10:21}

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

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

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

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#74

Сообщение feodor53 » 12.10.2021{, 10:28}

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

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#75

Сообщение feodor53 » 12.10.2021{, 10:35}

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

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#76

Сообщение feodor53 » 12.10.2021{, 10:37}

в крайнем случае "вручную" парсить средствами флпрог. или блок отдельный под это дело собрать.

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

Аватара пользователя
Phazz
Полковник
Сообщения: 1744
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 150
Откуда: Сургут
Имя: Анатолий

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

#77

Сообщение Phazz » 12.10.2021{, 11:12}

feodor53, Даже в примере JSON парсят отдельно

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#78

Сообщение feodor53 » 12.10.2021{, 11:19}

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

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

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#79

Сообщение feodor53 » 12.10.2021{, 17:31}

DeserializationError::Ok - это если Десериализация прошла успешно.

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

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

пропускает заголовки HTTP
использует HTTP версии 1.0 или обрабатывает фрагментированное кодирование передачи
Последний раз редактировалось feodor53 12.10.2021{, 17:40}, всего редактировалось 1 раз.

feodor53
Рядовой
Сообщения: 84
Зарегистрирован: 28.09.2021{, 13:45}
Репутация: 14
Имя: федор

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

#80

Сообщение feodor53 » 12.10.2021{, 17:36}

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

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

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

Ответить

Вернуться в «Визуальное программирование в App Inventor»