Как представить JSON в POJO для работы с Retrofit?
Делаю лабу для универа. Задача с помощью ретрофит запросить по апи у сервера текущую погоду и вывести ответ. Как я понял, для работы ретрофит, необходимо сделать класс, который будет иметь все поля как у ответа. Проблема в том, что у всех примеров, которые я нашел, поля имеют простой тип, инт или стринг, а мой сервер отвечает комплексным объектом, где несколько полей, у каждого поля тоже по несколько полей и тд. Для упрощения предлагается скормить этот ответ сайту jsonschema2pojo, и он сам все сделает, но там куча настроек, и я не понимаю, что нужно выбрать.
Подскажите, пожалуйста, как мне в итоге сделать этот класс? И нужно ли в нем вообще отражать все 20-30 полей ответа, если по факту мне нужно только одно поле температуры? Нельзя ли указать в классе только необходимое мне поле?.
там помимо этого пункта, еще достаточно мест в которых я легко могу ошибиться, вот и решил повременить, дождавшись ответа, а можете, пожалуйста, привести какой нибудь пример где у нас в json полей много (ну пусть хотя бы 3) а взяли в класс мы одно? как он понимает, какое из полей оригинала нужно взять в класс? по названию? а вложенность тоже можно не соблюдать? имею ввиду если поле "температура" это часть значений поля "инфо", все равно можно сразу поле "температура" вынуть?
Jacen11, а можно как то для человека, который позавчера впервые запустил androuid studio?) что такое вообще фабрика и какие они бывают? если нужно соблюдать вложенность, то как мне представить класс-родитель, который и не строка и не число а сложная сущность? где его прописывать?
в общем был бы очень благодарен, если бы вы пошагово рассказали, какой минимум действий, и в каких файлах надо совершить, чтобы сначала послать запрос, а потом из ответа вынуть "temp"?
Jacen11, да видел я это все, по вашему предположения о том как работает POJO и прочее я из головы взял?
вот взять даже скинутую вами статью, про то как создавать POJO тут сказано "ну или создайте сами или используйте сервис", как я уже говорил, с сервисом я не понимаю, что из десятка галочек мне выбирать, а для того чтобы писать самостоятельно. я не могу найти пример. в котором будут не только строки и числа, и это еще не доходя до остальных пунктов, которые вроде и понятны но не попробуешь-не узнаешь, а у меня нет класса для ответа
предположения о том как работает POJO и прочее я из головы взял
для начало пожо никак не работает. Почитай что это.
сервисом я не понимаю, что из десятка галочек мне выбирать
ну так пиши что не понятно, или ты хочешь чтобы я за тебя все сделал? Могу и сделать конечно, сколько готов заплатить? Уверен что хватит денег?
я не могу найти пример. в котором будут не только строки и числа
Тебя не смущает что строки и числа это тоже классы? Берешь и пишешь так же классы с полями. Чтобы просто заработало, там даже аннотации ставить не надо. Просто повтори структуру.
Или ты даже не понимаешь что такое JSON и как он будет выглядит в виде java объекта? Где твой код? Какие ошибки вылетают?
ну source type и annotation style я допустим понимаю (хотя на счет второго не уверен), а вот все что дальше я без понятия нужны ли мне или нет
Берешь и пишешь так же классы с полями
каждый тип как отдельный класс? в одном файле или в разных?
Или ты даже не понимаешь что такое JSON и как он будет выглядит в виде java объекта?
что такое жсон понимаю, доводилось сталкиваться на питоне и джаваскрипте, но и там и там это делалось в пару строк, как он будет выглядеть в джаве представляю весьма смутно
гугл тебе на что раз основ не знаешь? в джаве в разных. Уже давно бы попробовал
Ну вот давай по порядку посмотрим
Генерировать билдер. Тебе нужен билдер? Раз не знаешь что это, значит нет
Использовать примитивы. Ты не знаешь что такое примитивы в джаве? Тогда лабу ты сам не сделаешь, это прям нулевой уровень знаний
Использовать лонг, использовать дабл. Вообще не в курсе про типы данных?
Использовать йода дату. У тебя там даты есть? Нужны?
Не знаешь что такое конструктор и сеттеры гетеры? Лучше бы узнать. Без этого лабу не сделаешь
и тд
если реально не понимаешь ни одного пункта, то все очень плохо, там перечислены элементарные вещи характерные для любого языка. Ну а так мог бы уже все просто перепробовать пока не заработает
Jacen11, не то что бы я совсем не слышал про все эти вещи применимо к программированию вообще (по крайней мере про типы данных и геттеры-сеттеры), но я не представляю, нужны ли они конкретно ретрофиту для работы, кстати, так в итоге мне нужно всю структуру расписать как отдельные классы, или только часть, которая мне нужна (класс "main" с его полями)?
мог бы уже все просто перепробовать пока не заработает
перебирать 14 галочек это 2^14 вариантов) конечно заработает все не на последнем, но все равно много, и это при условии что будет все правильно в остальных местах, что не факт
что делалось?
ну например, на питоне я делал запрос к вк апи, проверяющий существует ли аккаунт с указанным номером, ну и соответственно из полученного жсона вынимал нужное значение, делалось все это для одного номера ну может строк за десять, без всяких представлений джсона в виде класса и тд, поэтому эти манипуляции мне не понятны совсем
ну и что такое json?
ну... универсальный формат для обмена данными между разными прогами, в нашем случае в нем сервер представляет ответ на наш запрос, выглядит как словарь со словарями внутри
ретрофит занимается только запросами, парсят фабрики, наример GSON или jackson. Moshi самый модный сейчас
класс "main" с его полями?
чо? что это за бред? лично я сам только теоретически знаю где в андроиде мейн и что там происходит. Ты оочень плаваешь
перебирать 14 галочек это 2^14 вариантов)
это не так делается. Пробуешь с тем что предложили по умолчанию, не сработало, ставишь все и начинаешь убирать лишнее, пока не начнут вылетать ошибки
поэтому эти манипуляции мне не понятны
какие именно? в статье по ссылке все подробно расписано, читай внимательнее
ну и соответственно из полученного жсона вынимал нужное значение, делалось все это для одного номера ну может строк за десять
если кратко, тут тоже можно так, но это для лошар и без ретрофита.
выглядит как словарь со словарями внутри
вот за такие вещи не люблю питонистов и новичков, абсолютно верное объяснение и абсолютно же бесполезное
ключ это название поля, а через двоеточие его значение. Вот и все
чо? что это за бред? лично я сам только теоретически знаю где в андроиде мейн и что там происходит. Ты оочень плаваешь
я не про этот мейн, я про то поле в джсоне которое мне нужно, это поле "temp", которое является одним из полей в "main", чую я создавать класс с названием main уже плохая идея) тогда как мне объяснить программе какое поле я хочу, если называется оно мейн а делать класс мейн идея не очень?
ретрофит занимается только запросами, парсят фабрики, наример GSON или jackson. Moshi самый модный сейчас
ну не ретрофиту а фабрике, как я понимаю, у меня гсон, какие галочки (кроме очевидно той где написано гсон) нужно выставить?
какие именно? в статье по ссылке все подробно расписано, читай внимательнее
ну мне не понятно на кой черт вообще нужны все эти танцы ради того чтобы сделать один запрос, у меня же их не сотня разных, а это какая то стрельба по мухе из миномета, ну да ладно, задание такое, я просто возмущаюсь
это не так делается. Пробуешь с тем что предложили по умолчанию, не сработало, ставишь все и начинаешь убирать лишнее, пока не начнут вылетать ошибки
как было по умолчанию я уже не помню (при обновлении страницы даже через ктрл+ф5 выбор сохраняется как был), выставить все галочки и убирать я не могу, потому что не знаю какие из них не нужны, вот должен мой класс быть serializable? a parceble? a jsr303 мне нужен? и так почти с каждым пунктом
конкретных вопросов по галочкам так и не увидел
вопрос все тот же, какие галочки нужны, либо как сделать такой класс самому, не расписывая его на 300 строк ради одного ответа, в лабе, которую я через две недели не вспомню, в конце концов, вы вот все меня подгоняете что я давно бы взял да попробовал, я уже кидал выше, как выглядит жсон ответ, я не прошу за вас делать всю работу, даже класс писать не прошу, но просто перечислить, какие настройки выбрать, чтобы этот класс заработал, это знающим взглядом посмотреть минуту, и я бы уже делал работу дальше
ты просто очень ленивый и ищешь легкие пути. Я в таком случае просто покупал готовую лабу.
мой класс быть serializable? a parceble?
так это к тебе вопрос, я тем более этого не знаю.
это какая то стрельба по мухе из миномета,
в твоем случае да, так и есть скорее всего. Это все нужно в больших проектах с большой командой
просто перечислить, какие настройки выбрать
прям с любыми сработает
в лабе, которую я через две недели не вспомню
ты не знал куда поступаешь? если все для корочки купи или договорись с одногрупником, как все. Если собрался зарабатывать программистом кучи денег, разбирайся. Знать это все нужно.