> Хочу вкатиться в разработку под Android! С чего начать? Большинство приложений написано на Java, выучить её на хорошем уровне — это первое, что необходимо сделать. Рекомендуемую литературу см. в Java-треде. После этого можно установить Android Studio, открыть официальную документацию http://developer.android.com/training/index.html и попробовать создать по туториалам своё первое приложение. В дальнейшем потребуется базовое знание SQL, понимание XML и JSON.
> Не хочу писать на Java! - Kotlin — JVM-совместимый язык от JetBrains. Есть лямбды, стримы и делегаты. Можно использовать в проекте вместе с кодом на Java.
> Есть что-то кроме нативных приложений на Java/Kotlin? - Qt — кросс-платформенный фреймворк на C++. Используется в основном для игры и для приложений с высокими требованиями к производительности (обработка изображений, звука, ГИС-системы). Спрашивать в C++ треде. - Xamarin — кросс-платформенный фреймворк на C#. Представляет из себя обёртку над Android API. Куплено Microsoft. Теперь есть бесплатная версия. Спрашивать в C#-треде. - PhoneGap/Ionic/Titanium/ReactNative — имя им javascript, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная как и размер комьюнити. Вопросы по ним — в js-тред. - BugVM — кросс-платформенный фреймворк, написанный на Java. Форк невинно убиенного RoboVM.
> Хочу писать игры! LibGDX или Unity. Спрашивать в /gd/.
> Что нужно, чтобы взяли джуниором? Что учить в первую очередь? Нужно хорошее знание Java, понимание базовых принципов Android (жизненный цикл activity/fragment, что такое Context, intents, services, UI thread, support library, shared preferences, SQLite), знание популярных библиотек типа Retrofit + Glide/Picasso. И хотя бы оно готовое приложение.
>>919117 >Это не учебник а скорее справочник. Но годный. Не повторяй моих ошибок - не вкатывайся начиная с него.
Почему? Он идеально по типу От простого к сложному. Может ты реально Справочник Шилда использовал. Потому что у него по языкам есть как учебники так и справочники. Я по Шилду шарп изучал немного. Теперь буду использовать как справочник потому что у них очень много общего с Джавой.
Катаны, теряюсь в догадках, а решить нужно быстро: что бы вы рассказывали людям первым делом, когда знакомили их с разработкой под ведро ? Пока что думаю рассказать базовую информацию по Gradle, манифесту, соответственно перечислить основные компоненты приложений - Application, Activity, Service, IntentService, BroadcastReceiver, ContentProvider. Потом уже после введения на первой лекции думаю рассказать более детально об Activity. Вопрос - насколько детально, и правильный ли я подход выбрал ? Люди знакомы с ООП, скорее всего на уровне джунов владеют шарпами.
>>919746 Вкратце программа на ближайшие лекции четыре-пять выглядит так:
1) Сборка проекта. Управление зависимостями 2) Стандартные компоненты. Составляющие приложения 3) Проектирование UI и верстка 4) Пакет java.util.concurrent. Асинхронное выполнение задач 5) Работа с базами данных. Пакет android.database 6) Обращение к сети. Пакет java.net 7) Шаблоны проектирования. Архитектура приложений 8) Unit-тестирование. Функциональное тестирование
привет, аноны, у меня к вам такй вопрос, что вроде как и кажется, что элементарное, но и не совсем. В общем, как реализовать TextView так, что при задавании ему слишком большого текста (например, более 3 строк) в конце ставилось троеточие и текст остальное обрезался?
Да, я знаю, что есть ellipsize="end", но оно не подходит тем, что может обрезать слово посередине. Например : "слишком длинный те...". А мне нужно, чтоб все слова оставались целыми, если уже и приходится обрезать, то часть слова не оставалась.
Кто-то такое реализовывал или возможно знает как такое сделать?
Анон, я тот нуб-кун из Киева. За недельку склепал аппу на 1500 строк юзающаю retrofit для openweather, picasso, Google maps api. Из корного: лоадеры, адаптеры, анимации, фрагменты и ещё кучу всякой мелкой дичи типа пермишинов, мультипотточности и тд. Что бы ещё сделать для портфолио что бы вкатиться джуном в киев.
Анон, как лучше всего организовать хранение данных? Суть токова: в приложении должен быть телефонный справочник и некая справочная информация. Причём, должна быть возможность и то и другое редактировать централизовано. Я пока додумался вот до такого: есть фтп-сервер, на котором лежит справочник в виде xml, справочная информация в виде html-страниц. При каждом запуске или по таймеру приложение коннектится к этому серваку и скачивает эти данные, если они изменились. Делаю своё первое относительно большое приложение практически с нуля, поэтому не знаю, как вообще подобные штуки реализуются. Этот способ мне показался наиболее простым. Или может как-нибудь по-другому это можно реализовать?
>>919977 >смотри что такое productFlavours Product flavours это для сборки разных версий одного приложения. А нужно: базовое приложение + модули расширений. Например у меня есть com.example.app и я хочу что бы пользователь мог поставить модуль расширения com.example.app.extension с возможностью вызывать методы из этого пакета в основном приложении com.example.app
Как организовать с rx подобную шляпу: 1) На определенном экране подписываюсь на обновление конкретной таблицы в базе (storIo); 2) Получая обновления отображаю их; 3) По клику на кнопку делаю всякие другие штуки;
Вроде как с первым и вторым пунктом все понятно, проблемы возникают с третьим, вот наивный вариант: http://pastebin.com/LLVfvWdS
Я попробовал с сабжектами, гляньте может где ненужная аллокация новых обсервеблов, или можно проще: http://pastebin.com/AwKSsQ9C
>>920493 upd: Может ли кто то заодно подсказать куда копать что бы при удалении элемента карточки из ресайкла запилить анимации передвижения карточек. notifyDataSetChanged просто перезапускает адаптер как я понимаю.
>>920504 Вот то что выше в прямом смысле - карточки мест с картинкой, дистанцией до заданной локации и погодой в этом месте. Их можно добавлять, да модифицировать - указывать ссылку нахождения пикчи или выбирать ее с помощью файлового менеджера. Локацию вводить гмапс апи. Все правослано через провайдеры/лодеры/адаптеры. Настолько что точно пойду учить реакт ради нахваленого выше сторио.
>>920496 И могут ли быть на собеседовании вопросы про внутрянку HTTP(Не только что такое гет/пост а и расписать что еть что в запросе и как его сформировать , можно ли вкратце рассказать про OkHttp?) или внезапно HTML(стоит ли повторять, разметку я то прочитать могу, а вот с ходу написать что то нет)
Написал пару крудов, одно чуть более сложное приложение. Хотелось бы угореть по MVP, собрал за некоторое время кучу статей. К сожалению, большинство из них очень короткие и описывают в общих чертах что это за архитектура и потом набрасывают пример который и без MVP бы не умер. Некоторые ещё и предлагают использовать свои какие-то васянские либы-реализации MVP использовать (в туториалах обучающих MVP). Короче, я хотел бы изучить вопрос в минималистичном сеттинге, где все интерфейсы пишутся и реализуются с нуля, и если используется хуйня типа Rx, event bus, DI или ещё чего-то, то только после того как появились проблемы а не сразу блядь всё. Проходил какой-то мини-туториал от гугла что-то там про тестирование. Сделали годно, но может есть что-то более развёрнутое?
>>919922 Много там в киеве джунопозиций? Я что-то по объявлениям не сказал бы. Сам думаю вкатываться джуном по весне, но мне надо будет переезжать. Вообще, не хотел бы ехать в киев, предпочёл бы одессу или львов. Впрочем, судя по количеству вакансий может ещё никуда не поеду и пойду работать на стройку. Кто что может пояснить за джунские позиции в украине?
>>920528 >Не школьные олимпиады А ну это другое дело, так домашку уже сделал?
Ну честно, я понял - ты можешь препод тебя натаскал решать стандартные задачки из учебников. Плюс ты пролистал GoF и вызубрил ты же олимпиадник паттерны aka фиксы ущербности ООП. Хотя лучше бы SICP осил бы или Haskell.
Но с чего ты взял, что ты можешь стать хорошим программистом и писать понятный и поддерживаемый код?
>>920572 Потому что мне нравиться кодить, мне интересна платформа и я хочу изучать ее. Или у нас в кодерах только те у кого на левой ягодице метка, спец службы находят их и они в яслях пишут проекты на миллион? Я не ебаный избранный Нео. Но я хочу въёбывать над тем что мне интересно.
>>920583 Кодь и не обращай ни на кого внимания, можешь даже код понятный не писать. Про олимпиады, впрочем, никому не рассказывай в контексте разработки.
Решил изучить разработку под мобильные усройства. Загрузил Андроид студио - и немного присел. Виснет "намертво" после долгой загрузки главного окна. Какие ему нужны системные требования-то? Нет среды разработки полегче? Как мне быть то :(
2гига ram, 2 ядра на пассивном охлаждении, до этого момента с тормозами не сталкивался
Слушайте, андроидокуны. А что вы все время разрабатываете? Вот реально интересно стало. У меня идей нет совсем, вот прям совсем. Всё ведь есть уже, а игори один кодер не сделает. Какое такое приложение можно сделать, чтоб заебись и не ебаться с нейросетями? Уже и парсеры всевозможные есть, и погодные аппы, и агрегаторы и справочники, и поисковики и пиздец. В общем, уже есть всё, так что же сделать такое, чего нет?
>>920825 > А что вы все время разрабатываете? Очередной клиент к рестопараше, тысячи их. КАЧАЙ @ ПОКАЗЫВАЙ @ КАЧАЙ @ ПОКАЗЫВАЙ @ КАЧАЙ @ ПОКАЗЫВАЙ @ КАЧАЙ @ ПОКАЗЫВАЙ Уже блевать охото.
>>920825 Что ты так боишься ебли с нейросетями, бля? Все эти распознавалки хуйни давно закодили. А вообще, углубление обычно идёт в конкретную область. Например, какая-нибудь специфическая ебля с системными настройками, через всякие дырки в системе. Или там сетевой клиент по какому-нибудь протоколу. Или ещё какая хуйня со сложными вьюхами
>>920541 Просто осознай суть, и пили свой велосипед, который будешь на протяжении нескольких проектов подтачивать. MVP у каждого свой, вопрос предпочтений же. Можешь посмотреть статьи Mosby о его вариации
Возвращается кэширование-очень-нужно-ананас из предыдущего треда. Вопрос следующий, насколько вменяема модель поведения в контексте мессенджера: 1) подключаемся на прослушку сокета после получения токена сессии, все сообщения полученные по этому каналу сплитим, в зависимости от данных в json-ах, приводя к нужным типам данных. 2) после получения обновления - пишем в базу, с использованием реактивной DAO обертки. Суть в том, что далее все подписчики по нужным эвентам будут извесчены что есть новые данные в таблице и будут получены с их стороны данные об измененном/добавленном ресурсе. 3) подписчик в лице презентера соответственно подписывается в начале жизни на нужный DAO, буфферит изменения, как только к нему байндится вьюха - сплевывает в нее свежие данные из бд. Так же обновляет в реальном времени.
Меня лично пугает немного сложность, когда расписываю это на словах. Но поскольку нужно, чтобы все быстро грузилось, и показывались обновления в реальном времени (а пинг до сервера около полутора секунд) - понятное дело нужно ввести кэш, и более вменяемой реализации его я не придумал.
Expiration будет скорее всего просто по количеству записей. То есть храним n-ное количество переписок, обновляя данные по ним, когда создается новая или старая выходит в топ - трем каскадно все таблицы связанные с перепиской последней по обновлению и вносим новую
>>920930 >нужно, чтобы все быстро грузилось, и показывались обновления в реальном времени (а пинг до сервера около полутора секунд) Для мессенджера как по мне похуй, мне тян не отвечают по полтора часа а потом пишут извини занята.
Допустим, есть служба, которая даже при всех закрытых activity делает что-то каждый час, например. И отображает счетчик в activity.
Если делать таймер через залупленный CountDownTimer - телефон не войдет в sleepmode так?
Я правильно понимаю, что такое нужно делать через AlarmManager?
Но ведь из AlarmManager нельзя вытащить прошедшее время, а мне нужно, чтобы при открытии activity отображался актуальный счетчик оставшегося до исполнения времени.
И при этом, чтобы телефон мог баиньки. Как усидеть на двух стульях?
>>921086 Что думаете про такой вариант? 1) Activity сворачивается\умирает -CountDownTimer останавливается записывается текущее время\дата ирл. -Стартуется AlarmManager с оставшимся временем на счетчике
2.1) Если до конца таймера activity не возобновляется - AlarmManager делает свое черное дело до конца. 2.2) Если до конца таймера activity возобновляется - AlarmManager прибивается, вытаскивается сохраненное время\дата ирл и сравнивается с текущим время\дата ирл, чтобы определить сколько времени прошло.
Как еще можно сохранить счетчик, не насилуя батарею?
>>920583 Не слушай даунов, кодинг — примитивный макакинг (особенно когда идёт речь про мобилки или веб) и стать кодером может вообще любой, не нужно утруждаться вопросами «смогу ли я». Просто делай и всё будет хорошо. А олимпиадник это даже плюс, довольно хорошо развивает как программиста и даёт некоторые навыки написания эффективного кода.
Как убрать индексирование изображений в отдельной папке? Создал файл .nomedia, почистил кэш, остановил службы, отвечающие за галерею (вроде как все), ребутнул смартфон и все-равно этот ебучий андроид добавляет мою порнуху с понями в галерею.
Аноны, поясните: нахуя в clean architecture и им подобных используется отдельный набор сущностей для domain-слоя, если он управляет чисто обработкой? Алсо, когда вам нужен только один параметр из сущности, добываемой из репозитория (url из аудио или изображения, юзернейм из юзера и т.д.) - в каком слое вы разбираете эту сущность, и передаёте отдельный параметр дальше?
>>921414 Ну и какая тебе нахуй архитектура, если ты даже от контекста абстрагироваться не научился? Возвращайся, когда поумнеешь, тогда можно будет и архитектуру обсудить.
>>921400 Потому что он может содержать больше/меньше информации чем нужно пользователю. В presentation-слое у тебя должна быть модель со всей нужной информацией для показа на экране. Пример: отобразить информацию о покупке приложения, в domain-слое у тебя будут отдельные TransactionInfo, ApplicationInfo, в presentation ты передаешь какой-нибудь ApplicationPurchaseInfo в котором будет только то что нужно для отображения на экране. В случае изменений в TransactionInfo или ApplicationInfo они останутся в domain-слое.
>>921595 Спасибо бро. Зло, описывать всю логику взаимодействия контроллера с вьюхой через биндинги. Но для простецких задач, типа, привязки полей модели к инпутам вьюхи - вполне себе норм. Не нужно писать кучу ненужного кода и заняться решением бизнес задач.
>>921662 Ну в общем то, была бы она на rx2 - я бы не рыпался, но увы. Поскольку проект висит на rxJava2 - то не могу позволить себе подключить первый только ради этого
Хм, а как лучше организовать общую абстракцию для работы с сервером и с базой - предоставлять фабрики DAO для каждого из ресурсов из репозиториев и сводить к одному в модели c добавлением хэндлеров на случаи ошибки ?
Приветствую. Читаю про Даггер вот это https://habrahabr.ru/post/279125/ и не могу понять как использовать конструкторы модулей. Я так понял, модули ты пишешь не для себя, а для компонента, который будет их использовать. В смысле, ты в коде модулей вообще не касаешься. А как тогда использовать конструктор, чтобы передать тот ж контекст? Или я все неправильно понял?
Поясните про это гуглоподелие? Для теста компилятора брал таймзоны ftp://ftp.iana.org/tz, вывод показал кучу несоответствий стандартам POSIX. Как Андроид работает с этой датабазой несоответствующей POSIX?
>>922077 Юниттестировать классы, работающие с бд - пердолинг, бесполезный, если все делать по правилам. Куча ненужного кода, который уже реализован в тестируемом классе. А использовать уже написанный нельзя - ведь "азаза не независимый тест". В итоге тратишь на тесты времени больше, чем на тестируемый код.
Либо вертеть на хую фанатиков независимых тестов, и тестировать в качестве "интеграционных тестов", в определенном порядке.
>>922311 Например, тебе нужно протестировать метод, который удаляет что-то из базы данных.
И чтобы это было юниттестом, ты не должен использовать уже написанный и оттестированный метод записи в бд.
Ты должен написать костыль записи тестового значения, который сфейлится при изменении структуры бд, или просто не будет работать так, как нужно - ведь никто не будет писать тест на тест.
В итоге то, что ты мог уместить в две строчки. используя готовый и оттестированный метод - будет раздуто в раздутую глючную хероту.
Ничего не могу найти на этот вопрос. Виджеты разделяют с приложением экземляр application или нет? То есть, общие глобальные переменные через него возможно делать?
>>922250 Если у тебя есть модули с конструктором ты их сам создаешь и передаешь компоненту при его создании. Пример из твоей же статьи: [CODE]protected AppComponent buildComponent() { return DaggerAppComponent.builder() .appModule(new AppModule(this)) .build(); }[/CODE]
https://habrahabr.ru/post/320242/ Господа, кто-нибудь реально убирает ифы в своих адаптерах, и пишет подобный велосипед? Это же полный пиздец и код ради кода, нет? Если, например, у вас адаптер работает в двух режимах отображения элементов, в зависимости от параметра X - придётся либо использовать ифы, либо устраивать велосипед из енамов енамов.
Призываю тех кто много кодит приложух. Вот смотрите, в веб-программировании, нужно подгонять сайт под различные разрешения и браузеры. А как с этим обстоят дела в андроид? Нужно ли пердолить приложение под каждый телефон, версию андроида итд? Сильно ли это заебывает или всё просто? Казалось бы джавовское write once run anywhere, а на деле хуй.
>>922613 Пиздуй в гугл, все это разжевано донельзя. Write once run anywhere больше касается архитектуры, радуйся что тебе не нужно задумываться "так это x86, тут sequential consitency, а вот тут для arm, нужно добавить memory fence иначе процессор может поменять инструкции"
Пиздец какой-то, зачем гугломакакии назвали widget пакет с различными классами view? Нагуглить что-то путнее про сами виджеты очень сложно, как примеры так и статьи, 90% поиска забито херней уровня android.widget.TextView.
>>922672 Разные разрешения и версии дроида есвенно. Второе фиксица библиотеками поддержки которые дают в старые версии функцианал новый. Но иногда бывают нюансы. В 5 дроиде появился материал дизигн, в 6 безопасность слегка поменяли. Версии ниже 4 почти не поддерживают.
>>922508 Забей хуй. Это для мамкиных GoF адептов, недавно прочитавших про хуяттерны и пытающихся внедрить их везде где можно и нельзя. Используй KISS и YAGNI.
Есть сайт с кривым недокументированным api. Есть android приложение которое это api пользует. Как бы мне посмотреть какие http запросы отправляет приложение?
>>922077 Ну к слову, сейчас начал пробовать сделать это как у них в сэмпле, вроде как не нужно менять свои классы, с роболектриксом то. Пока что правда запустить не удалось, но это вроде бы у меня косяки с SQL синтаксисом
Народ, помогите.Я еще нуб. Пилю небольшое приложение, нужна помощь с SQlite. Можете подкинуть ссылки на проекты с ее использованием? Просто, много инфы с простыми примерами, которые я понимаю. Но мне надо например пример с использованием SQ-ных VIEW, триггеров и т.д. Когда много таблиц. А то что-то сижу и не вдупляю ни хрена.
>>919538 (OP) Как тестить метод презентера с rxjava? Понял, что надо менять оба scheduler'a на immediate, но при нем тест падает в throw new RuntimeException(...) хотя это должно обработаться в subscriber'е в onError
>>923084 Когда использовал его - замечал что нужно использовать где-то модуль, чтобы он начал билдиться. То есть отдельно модуль без компонент и без инжектов иногда билдиться не хотел
>>923410 беру данные из инета, если IOException беру из бд, если там пусто делаю вот так: if (data.isEmpty()) throw new RuntimeException(throwable); т.е. просто пробрасываю дальше, на девайсе всё работает как надо, а тест падает именно тут - throw new RuntimeException(throwable);
>>923418 Нормальную ошибку кидай, а не рантайм, может помочь. Если к слову кидаешь внутри какой-то функции - то нужно в ней же и отлавливать, вроде как. То-ли баг, то-ли фича, черт его разберет
А есть ли какая-то возможность на время выполнения AFTER %OPERATION_NAME% SQLite-триггера отложить все запросы и выполнить после завершения запроса триггера ?
>>923428 попробуй observable конвертнуть в блокирующий - toBlocking() А вообще вот эта хуйня с перекидыванеим это игрушка дьявола ежжи, надо оборачивать как все крутые посоны, возьми какую-нибудь имплементацию Try с гитхаба, или свою напиши по мотивам.
>>923438 так где его использовать? вот у меня в презентере есть метод - получить данные, проверить их и послать вью, или послать во вью ошибку, и я хочу проверить какие методы вью вызываются
>>923442 >То, что триггер должен срабатывать после INSERT-а, очевидно же, лол >А есть ли какая-то возможность на время выполнения AFTER %OPERATION_NAME% SQLite-триггера отложить все запросы и выполнить после завершения запроса триггера ? Вот совсем не очевидно, знаешь ли. Давай лучше пример покажи, что ты хочешь сделать. Например "Хачю штоб после вставки значения в столб INTEGER Рост, если Рост меньше 180 - в столб BOOLEAN Карлан-унтерменш записывалось True."
>>923454 Есть. Который ты напишешь и над которым поколдуешь сам. Тут вроде как нет отличий в применении от других SQL запросов в андроиде. А на практике такие вещи лучше усваиваются, после череды выстрелов в ногу.
>>923454 То есть, ты же любой пример по SQL в андроиде можешь взять, если не знаешь, как работать в нем с запросами. Зачем искать пример по каждому элементу запроса именно на андроиде, которых всегда будет недостаток, чем менее попсова нужда?
View и trigger это же уже из области проектирования структуры твоей бд под твои нужды, что от андроида зависит чуть менее, чем никак.
>>923448 Хочу чтобы после операции добавления проверялось количество записей по предикату и если оно превышает определенный размер - шло рекурсивное удаление записей по другому предикату, до тех пор пока общее число не станет равным капу
>>923489 CREATE TRIGGER audit_log AFTER INSERT ON COMPANY BEGIN ....INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now')); END;
Этоя просто выдернул из примера для наглядности синтаксиса. По сути то, что между BEGIN и END - это обычный такой подзапрос. То есть, он строится может без оглядки на внешний блок. То есть, нужно вычленить из >Хочу чтобы после операции добавления проверялось количество записей по предикату и если оно превышает определенный размер - шло рекурсивное удаление записей по другому предикату, до тех пор пока общее число не станет равным капу "Хочу чтобы проверялось количество записей по предикату и если оно превышает определенный размер - шло рекурсивное удаление записей по другому предикату, до тех пор пока общее число не станет равным капу" И на этом строить запрос, словно никакого триггера нет. Как бы ты строил без него. Потом обернуть синтаксисом тригера.
>>923587 Но я хз, что делать, если даже после всех удалений строк по условию останется больше строк в итоге, чем нужно. Разве что по id или timestamp самые старые чистить, например.
>>923489 Мне аж интересно стало, по какому критерию будешь удалять записи, чтобы их гарантированно стало определенное число? Мне никакой вариант без сортировки в голову не приходит.
>>923436 Я говорю плохо в цепочке выкидывать какие-то левые исключения. А если обернуть в монадку то ты в onNext возьмешь и обработаешь верный результат одним макаром, ожидаемые ошибки (файл не найден) другим, а фатальные ошибки третьим способом, onError предназначен для фатальных ошибок.
>>923436 >>923733 То есть для того же retrofit'a можно использовать и Observable<Response<?>> и Observable<Result<?>>, зависит от того где ты хочешь рбрабатывать IOException и HttpException
>>919538 (OP) С Robolectric возможно тестировать recyclerview? Надо протестить scrollListener, че то он вообще не вызывается, хотя в адаптер recyclerview кладу данные и двигаю layoutmanager к концу
>>919538 (OP) Сап, андроидач. Есть одно клиент-серверное приложение. Веб-сервис на пхп, и два клиента - сайт и приложение. Авторизация происходит на клиентах через гугл.
ВНИМАНИЕ ВОПРОС Сейчас пилю платную версию приложения, в которой будут доступны некоторые фичи. Необходимо на веб-сервисе запилить проверку что пользователь купил приложение. Api для этого не нашёл. Какие варианты?
>>924311 Хотя, это хуйня как по мне, потому что >The licensing service generates a single licensing key pair for each application and exposes the public key in your application's Services & APIs page in the Developer Console. You must copy the public key from the Developer Console and embed it in your application source code. The server retains the private key internally and uses it to sign license responses for the applications you publish with that account.
>>924313 В итоге твое приложение декомпилируют на следующий день, и каждый васян будет дрочить твой сервер нахаляву. А если там еще сторонние платные api используются при этом, типа гуглопереводчика - то это ж пиздец, доверять такое гугломартыханам ебучим.
>>924313 Это же типа для подписи. Приложение посылает запрос гуглу чекнуть привелегии текущего пользователя. Гугл присылает ответ. Без подписей какой нибудь васян может спокойно подменить ответ гугла своим (в том числе вообще и не пропустить запрос к гуглу). А так ответ подписан дохуя сикретным ключом гугла - и васян его подменить уже не может. А ключ в исходниках это открытый ключ - то что его достанут нихуя не даст. Если конечно у васяна не завалялся квантовый компьютер.
Гугл не пустил в маркет, ссылаясь на unauthorized use of copyrighted content in your promotional screenshots. В этих самых скриншотах только постеры фильмов и фотографии актеров, получается, дело в них. При этом тысячи приложений используют их подобным образом, и они явно не получали для этого никаких дополнительный разрешений. Как выйти из ситуации?
Поясните нюфагу: где-то читал, что при оверрайдинге методов всегда надо вызывать super.* Хочу в коде оверрайднуть onBackPressed(); но если я вызываю super.onBackPressed() то весь последующий код не работает, если я его не вызываю то все работает как надо. Вопрос: есть ли в моем случае подводные камни?
>>924868 > где-то читал, что при оверрайдинге методов всегда надо вызывать super.* Тебя наебали. Зависит от метода. В случае onBackPressed(); от конретной ситуации зависит.
>>924868 Если я правильно понял сорцы - активити уничтожается при вызове onBackPressed(). То есть, ты вызываешь дефолтную имплементацию, а активити сдыхает раньше, чем ты пытаешься что-то сделать.
>>924943 >>924886 У меня интент возвращает значение, а потом я вручную финишу её, мб лучше вместо финиша вызвать супер? Или супер сам тем же финишем пользуется?
>>924963 Что за бред? Подыхает активити или нет (я уверен, в родительском коде просто вызывается finish или что-то похожее происходит), код не может не исполняться после вызова метода родителя, если не бросается какое-то исключение. Посиди с отладчиком или логгером, разберись, почему твой код не работает, а не делай такие безумные выводы.
>>924987 Но чтобы послать intent через LocalBroadcastManager, нужна передать ему контекст. Что там происходит, когда активити убито? Контекст чего передается и какой вообще?
Является ли нормальной практикой класть в общий для всего приложения класс application какие-то долговременные результаты типа обработанных данных, которые потом можно вставить в разные activity или виджеты?
>>925095 Нужен отдельный класс для хранения. Или вообще контент провайдер. На и на память смотреть нужно. Если данные легко получить заново, то лучше их не хранить (если они памяти много занимают). Или там настроить освобождение памяти в onLowMemory. Но в общем идея хорошая.
>>925117 Все бы ничего, но виджет не только отображает данные, но и позволяет минимум манипуляций с ними. Пока он есть, сабкласс application может быть прибит? Я читал, что они находятся в одном процессе же.
А то выйдет, что виджет, допустим, текст отображает, а самой переменной нигде уже нет, application прибит.
Ну, грубо говоря, например виджет показывает число 5, и при нажатии на кнопку число должно возводиться в квадрат.
Вот если бы во время существования виджета у него был свой свой экземпляр класса в памяти, в котором можно было это число хранить - проблемы бы не было, наверное, но его нет, и за обновление отвечает AppWidgetProvider, который долго не живет.
Как вот сохранить это самое 5, чтобы передать его службе или activity при нажатии где-то на виджете? В файлике каждый раз при обновлении виджета записывать значение, может?
Либо я вообще зря себе мозг ябу и при смерти application виджет тоже схопнется?
>>925140 Хм, можно же поля в application задавать через setter, а в нем дублировать в файл. Если application и перезапустится - то данные восстановятся через указание в onCreate() ручками. Так что не так уж тщетно бытие, видимо.
И все же, если виджеты и application работают в одном процессе - почему мы используем remote views и pending intent? Сдается мне, что тут что-то не так. К тому же виджет рендерится отдельно хостом, не? При смерти application по-умолчанию не должны же с ним какие-то изменения происходить, не?
>>925041 Контекст активити. В момент закрытия, активити жива. И остается жива долгое время, как минимум до окончания вызова onDestroy. Далее уже точно не знаю, надёжнее всего считать, что активити не существует. Хотя наверняка можно будет ещё контекстом пользоваться.
>>925157 > И все же, если виджеты и application работают в одном процессе - почему мы используем remote views и pending intent? Сдается мне, что тут что-то не так. Не работаем в одном процессе. В твоём процессе есть только бродкаст ресивер, который получает события для манипуляции с виджетом.
>>925159 Хм. Так я и думал, что бы там на stackoverflow не писали. В общем, контент виджета и активити никак не выйдет гарантированно держать синхронизированным без файла, выходит.
Допустим, приложение раз в час создает новый контент и создает notification о поступлении.
Так ли критично, чтобы пользователь при нажатии попал именно в activity с инфой из уведомления?
Могут ли подорваться до 1чек чьи-то жопы, если, допустим, уведомление висит нетронутым, пользователь получает все новую и новую инфу в самом приложении, потом жмет на уведомление и... Попадает на то же самое место, на котором остановился, а не на то, которое в уведомлении?
Является ли обратное удобной фичей, или же пустым пердолевом для аутистов?
>>925169 Зависит от задач которые ты ставишь перед интерфейсом. Если, к примеру, ты хочешь чтобы он был "удобным" то одна из целей - минимизировать количество действий пользователя. Тоесть тебе нужно прикинуть возможные сценарии действий пользователя которые он захочет совершить после получения уведомлений и при нажатии пользователь должен попадать на активити которая позволит ему совершать минимум действий (в среднем). Если, к примеру, ты хочешь максимизировать показ рекламы - то после нажатия пользователь должен попадать на рекламу. Ну и так далее.
>>926266 Вопрос желания извращаться же, как по мне, так можно на простых проектах использовать что нравится (хоть хаскелль, ей богу), а вот большие (больше 6-7 модулей, наверное, и тысяч за 150 строк кода в совокупности без тестов) уже только на java. Ибо на данный момент она банально менее багована и по ней больше доков + больше фичь есть (тот же Unsafe, ога)
onReceive в AppWidgetProvider реально перепилить на прием кастомных неявных intent'ов? Прописываю в манифесте, проверяю в самом методе - и никакой реакции.
>>919538 (OP) У меня есть сервис(intent), который в фоне синхронизирует локальную бд с апи. И по окончанию этого процесса мне из сервиса нужно дернуть метод фрагмента, который обновит ui. Все что гуглится это какие-то костыли или непонятно что и я уже подумываю не заменить ли сервис на лоадер. Как-то по нормальному это сделать можно?
>>919538 (OP) Сап, делаю простой текстовый квестик на ведройдике. Есть некий общий лейаут (информация об инвентаре, ранах, сломанных костях, порванных артериях етц) переход на который должен быть доступен с любой локации, с возможностью после просмотра инфы с этого лейаута вернуться на тот, с которого я совершал переход. Сначала хотел через setcontentview организовать, но потом подумалось, что просто натянуть новый лейаут сверху, а при выходе удолить будет проще. Только вот чем вот можно сверху его надеть?
>>927054 Джентельменский набор: Todo App, синкающийся с календарем Трекинг расходов/доходов, с синхронизацией через гугл драйв например Погодное приложение
Безопасно ли прикреплять к notification какой-то intent с рабочим объектом с данными? С одной стороны, intent явный же, с другой - он летает между приложениями, он совсем не локальный.
Можно ли его спиздить и узнать кусочек внутренней реализации?
Есть сервис (расширяет Service), который стартуеся по интенту и начинает аплоад файла по апи, загрузка с помощью rx на io, по выполнению возвращается в мейн тред и кидает бродкаст с одним экшоном и результатом если все ок и с другим экшоном если вылетел эксепшн, ловлю ресивером во фрагменте. Ресивер регается в onResume и убирается в onPause. Проблема в том что бродкасты об ошибках до фрагмента доходят, а вот саксес - нет. Пробовал и локальные ресиверы и глобальные, даже в манифесте регал, до него тоже не доходит успешный интент. В чем соль?
>>928127 Вопрос снят, хуй знает в чем проблема, переделал цепочку, теперь бродкаст шлется, но непонятно почему если до onNext доходит в обоих случаях, бродкаст шлется только в одном, мда.
>>928326 Мне кажется, проблема не с куками а с самим запросом, потому что возвращается не страница "ошибка логина" или "логин успешен", а главная. Видимо, с передачей параметров в POST загвоздка. Но за ссылку спасибо, посмотрю.
Что скажете про долгосрочные курсы Гик Брейнс ? Заинтересовался Мобильной разработкой https://geekbrains.ru/professions/mobile_developer звучит красиво и цена неплохая, каково обоснованное мнение Анона?
>>928388 если есть опыт в программировании то не стоит, сам во всем разберешься. Ежили нет, то зависит от упорства, желания или денег. Если есть первые 2 качества, то таки сам до всего дойдешь не потратив ни копейки, но если деньги не проблема - пройди курсы, промотивируй себя тем что заплатил
>>928388 Никогда не связывайтесь с этой конторами и прочими курсами от Васяна. Годные курсы могут быть лишь у хороших университетов (курсера, едх, степик) и у технологических компаниях уровня Яндекса, JetBrains. И всегда они бесплатные.
На курсах от Васяна вы будете слушать пересказ официальный документации и решать хеллоуворды из книг серии "ххх for doomies", получите меньше навыков и опыта, чем если бы потратили неделю на самообразование, и сертификат, которым можете подтереться.
>>919538 (OP) юзаю андроид студию так получчилось, что нужно использовать именно встроенный эмуль. пишет: waiting to target device to come online хотя эмуль запущенный, летает, запускается тоже быстро, анончик, как лечить?
Посаны, не знаю где такое спросить. Есть android устройство на arm процессоре, есть разные ядра (версии 3.10) от васянов к этому устройству. Я хочу подключать wacom планшет через usb-otg. Планшет видно в dmesg, лампочки на нем горят, но ничего не работает. Стоит ли пердолиться и пробовать собрать ядро с вакомовскими модулями или это дохлый номер? Впустую тратить время не охото.
Народ, а вообще с приходом чистого MVP, RxJava, Retrofit и прочего, помимо специфических юз-кейсов, используются ли Service-ы, BroadcastReceiver-ы и прочее ? Просто, как по мне, ведь все в рамках приложения спокойно реализуется без них, и, более того, данные компоненты лишь ухудшают читабельность кода, из-за обязательной привязки к контексту, следовательно, загрязняя активность/фрагмент.
>>930092 Если можешь реализовать без них, то так и делай. Но как ты будешь например отправлять или получать данные в фоне (с закрытым приложением) без сервисов? никак
Как вызвать метод public void onButtonStopClick(View view) реагирует на нажатие кнопки в другом методе. Не знаю какой что передать в параметр "View view"
Анон, помню в одном из тредов скинули тестовое задание для джунов. А именно, требовалось создать приложение, которое берет данные с сайта вроде weather.com и отображает их. У кого-нибудь сохранилась ссылка на это тестовое задание? Где можно найти актуальное тестовое задание Российских компаний?
>>930283 20 лвл, живу в украине, львов. Вакансий на трейнии мало, ходил только на одно собеседование, обычно всем нужны джуны с 1+ годом опыта. Потом один знакомый написал что ему нужны андроид пацаны и дал контакты чувака, который меня на работу и взял. Этот чувак собирается свою фирму открывать, спрашивал не сильно, в основном какую-то глобальную теорию типа: "как тянул инфу с сервера, как работают джсон обьекты, генерализацию джава", потом я показал свой курсач, там были sqlite и ретрофит, потом кинул гитхаб, на который по его просьбе закинул этот курсач и лабы, которые писал на андроиде в универе, штук 5-6 их было. Пока что работаю дома, пилим апки для рекламы фирмы. >что именно делал для вкатывания ну вот курсач и лабы помогли, так то они говорили, что хотели тестовое задание дать, но т.к. у меня уже было свое говно, то не дали.
Решил разрешить пересоздание activity при повороте экрана. В результате одна принципиально важная view, размеры которой match_parent, имеет размеры 0x0. Не знаю как сформулировать вопрос гуглу, так что спрашиваю об этом здесь Есть цикл, который ждет пока размеры не станут нормальными, и пробует их раз в 10мс. Он ждет вечно Почему такая херня?
Проясните за Rx. Как привязать Observable например к ArrayList? Гуглю туторы - но они вроде устарели - так как на новых версиях либы много чего горит красным. ЧЯДНТ?
>>930947 > ЧЯДНТ Используешь rx2 >>930869 > Есть цикл, который ждет пока размеры не станут нормальными view.post { view в лэйауте и имеет размер } Не говоря уже о том, что ты и сам можешь вызвать view.measure
>>931211 Мне тут на днях прислали задание на трейнии, надо сделать десктопоне говно, которое режет фотку на пазлы, сейвит N фоток в папке, а потом другой алгоритм это все собирает. Чтобы первый и второй алгоритмы не были связаны и ничего друг о друге не знали.
>>931250 > тянет на середнячкового миддла, но на джуна. Шутишь что ли? На джуна в самый раз. Мне подобные давали как тестовые задания. Если ты нормально андроид знаешь, а именно основы и пару либ, то ты это за 2-4 дня сделаешь.
>>931270 Хуевые макеты, не признаю ничего кроме sketch. Берешь фотошоп дроченый, открываешь эту хуйню и смотришь размеры. Дизайнер же по гайдам верстал? Если да, то почти без проблем можешь считать что 1px на макете = 1dp.
>>931289 Зачем бизнесу тратиться на java и swift макак, если можно купить одну javascript макаку? Результат будет один и тот же практически. React native выйдет из преальфы, релиз за релизом.
Live reload, один код на двух платформах, падение производительности по сравнению с нативом незаметны. Киллер фичи. Не убьет нативные языки, так потеснит
>>931319 В том то и дело, что ни одной программы, которая нормально показывает его файлы нет. Так что дизайнер должен юзать общепринятый в отрасли psd или идти нахуй.
Реквестирую какой-нибудь гайд по TDD. Прошёл раздел про тесты на вогелле, но нихуя не понял. Желательно какой-нибудь гайд, где мы последовательно разрабатываем какую-нибудь приложеньку по TDD. >>931270 На глазок. А цвета пипеткой замеряю.
>>931373 Нормальный дизайнер сам тебе все нарежет, существует куча плагинов экспортирующих асеты под ведро/гейось/уеб/десктоп. Все это закинет в папочку и пришлет тебе вместе с макетом.
Подкиньте пример или идею, как прикрутить к GridView матрицу (многомерный массив)? Все что нахожу - одноклеточное говно, работающее на одной последовательности. А где есть матрицы - они сливаются в один лист и хуй знает как вообще потом определять строки\столбцы при нажатии.
В других графических фреймворках почему-то grid'ы с православными строками\столбцами, и только в ебаном ведре хуярят через сплошной лист.
Заполнить сетку-то их вьюхами просто, слив матрицу в одномерный массив. Но как при нажатии вычислить позицию в сетке, если в адаптере используется только одно число position?
Мне это нужно, чтобы оперировать самой матрицей. Например, поменять несколько объектов местами. Передвинуть выше, например. Я же не могу сделать это в одномерном массиве.
>>932278 >>932277 Сделай класс матрицы который инкапсулирует доступы/смены элементов. Типа такого: http://pastebin.com/MecHx61p Вообще сейчас норм использовать RecyclerView, и что бы получить грид - GridLayoutManager
>>932296 Задаешь лэйаут менджеру ширину матрицы как спан каунт и все. А дальше тупо по позиции дергаешь элементы, она тупо слева на право, сверху вниз.
Вот учу я андроид и чем дальше тем больше узнаю о всяких мелких нюансах и подводных камнях. Сейчас читаю "The Busy Coder's Guide to Android Development", так там в одной главе про ресурс сеты и конфигурации черт ногу сломает во всех возможных сценариях. При этом сам автор говорит, что несколько лет кодил и о некоторых имел ошибочное мнение все это время. Я не пойму почему вкатывальщикам советуют андроид, мол легче чем в энтерпрайз? При том что тут надо сначала знать джаву нормально, что бы не обсираться, а потом еще и знать андроид фреймворк со всеми его правилами.
Всем привет, хочу написать свой вьюпэйжер, который динамически подгружает при свайпе влево право, предыдущую страницу или следующую на основе фрагментов. Кто подскажет как свой компонент сделать? Искал в оф доке, там про создание компонентов хуй да нихуя, как вообще работает отображение компонента?
Как отобразить один виджет над другим? Например, что-то над фоном. Я знаю, что можно сделать один parent'ом, но как быть, если они оба child другого parenta? Как внутри parent'a регулируется, какой виджет перекрывает другой?
>>932737 Значит я не понимаю как это сделать в адаптере, Начальное состояние вьюпейжера мне нужно такое даны три фрагмента, активити открывается на втором фрагменте. Далее после свайпа, например вправо, текущий фрагмент становится третий, теперь мы должны удалить первый фрагмент и добавить 4й, так чтобы количество фрагментов осталось 3 и по прежднему текущий фрагмент был вторым. Мне нужно поставить обработчик на onchangepage метод onpagechaged и в нем пересоздать адаптер с новым содержимым?
Или нужно как то в адаптере перезаписать метод initializeItem и в нем удалять ненужный фрейм и добавлять новый? Или новый список с фреймами пересоздавать на это событие и выставлять текущую снова вторую.
Вообщем не понимаю как сделать так чтобы оставалась позиция страницы всегда вторая.
Повторю вопрос из ньюфаг треда, так как тут больше java-анонов.
Посоны, кто-нибудь проходил курс Java rush? Стоит он затраченного времени? Потому что я вот на втором уровне и меня как-то настораживают многократно повторяющиеся задачи типа "выведи петросянские смехуечки на экран".
Как вычислить размер вложенного один в другой layout'a, если у вложенного есть отступ от краев?
Пытаюсь взять размер экрана, взять размер отступов (перевести их в пиксели), отнять отступ * 2 от размера экрана - и чет нихуя не сходится в итоге. Куска в пол миллиметра не хватает.
Где и как вы храните реквест коды, что бы все было ништяково и не совпадало со всякими пейсбуками, вкашками и прочими гугл сервисами? Ну и что бы собственные между собой не пересекались естественно
>>933018 Фокус в том, что мне нужно в GridView динамически подгонять размер ячеек под размер экрана. Если я засуну определение ширины в Runnable, это же все равно случится после того, как адаптер распихает все в GridView, не? Мне вот надо как-то в момент впихивания первого элемента успеть получить значение.
>>932900 На 16 уровне сейчас. Довольно годно, если вообще 0 в программировании. Задрочка кода там повсеместно, но зато действенно. Для того чтоб вкатится в андройд достаточно 10 бесплатных уровней. Так что можешь не покупать подписку.
>>933072 Почему бы тебе не посчитать размер до прицепливания адаптера? Получаешь размер доступной области для своего грида, вычитаешь место для отступов между объектами, или как ты там себе думаешь, и потом задаешь эти параметры адаптеру, который будет знать какого размера вьюхи делать. Есть другой способ, не требующий специфических действий извне. Берешь percent relative/frame layout, используешь его как корень вьюхи итема, ширину итемы всегда будут получать одинаковую, а ты просто задаешь нужный тебе аспект рэтио.
>>933086 Спасибо, а то я боялся что там все бесплатные уровни будут на уровне хэлло ворлдов. Я уже пару лет пишу под android, но есть определенные пробелы в знаниях по Java, вот решил этот курс попробовать.
>>933094 ну ты же хочешь положить деньги кому-то в карман за то что можно получить бесплатно? Чем я хуже, со мной хоть времени терять не будешь на смехуечки.
>>933088 А у грида тоже match_parent. И у всех его родителей. Я пытался считать через DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics);
там высчитывал параметры ячейки и передавал адаптеру. Вот только размер грида не совпадал с тем, который можно получить потом в getWidth. Хотя, считал по формуле.
Да и я уже наконец-то сделал, что нужно через задание адаптера в post.
>>933103 Я и не задавал. Я делал так. Допустим, экран 1000 пикселей. По бокам от gridView по отступу в 10dp. Перевожу их по формуле в пиксели, получается допустим 100 пикселей на отступ. 1000 - 100*2 = 800. Но атятя, не сходится почему-то.
Анон есть 3 активити. Активити 1 передает через интент значение в 2, 2 просто запускает активити 3, 3 делает запись в бд и возвращает на 1 активити, как сделать так, чтобы с 3 вернуться сразу на 1, не открывая 2?
>>933109 Потому что ты делаешь черти что, без обид. >>933117 FLAG_ACTIVITY_CLEAR_TOP If the activity being started is already running in the current task, then instead of launching a new instance of that activity, all of the other activities on top of it are destroyed and this intent is delivered to the resumed instance of the activity (now on top), through onNewIntent()).
Анон, обьясни, пожалуйста. Я должен написать конструктор, (Parcel in), где каждому полю присваивать значения из этого Parcel in, тоесть: public Constructor(Parcel in){ field1 = in.readDouble(); field2 = in.readString(); field3 = in.readInt(); }
а в [size] указать кол-во полей, в моем случае 3? public MyParcelable[] newArray(int size) { return new MyParcelable[size]; }
>>933150 Ты должен читать поля в том же порядке в котором записывал, в newArray ты просто должен создать массив своего типа с данным размером, количество полей там не при чем. Это сделано для того что бы избежать рефлексии для создания массивов.
От чего может падать эмулятор? Поворачиваю устройство, он думает-думает... И вылетает, ничего не сказав. Критическая ошибка,пожаловаться разработчикам, все такое. Задача у меня: сохранить большой объект (лабиринт, который может генериться секунд 40, если большие размеры указать) и не генерить его заново после поворота. Делал через static - падало с размерами 23x23. Сделал с повторной генерацией после поворота - начало падать на 40x40. Не знаю чего еще сказать подскажите, кто знает
>>933411 Код по ссылкам может не работать или быть с багами или просто ты не догадаешься его правильно испльзовать. головой кароч подумай чутка. Если думать не хочешь, открывайанус кошелек.
Анон, хочу вкатиться в андроид. Начал заниматься по startandroid, но это все-таки не то. Хотелось бы найти какую-нибудь нормальную книгу, чтобы получить общую картину, а не обрывки в духе "как сделать xyz?". Что посоветуешь?
>>933607 Смотри, как человек, обучающий других людей этому делу, могу сказать следующее: лучше начни с "Философии Java", если вдруг чувствуешь себя хоть чуточку неуверенно. Потом попробуй двигаться дальше и рассмотри все основные компоненты андроид-приложения, к каждому из которых сделай небольшой sample-проект. То есть начиная с простого, Activity, переходи постепенно дальше, к динамичному UI с фрагментами (сделай например нормальный нелагающий Navigation Drawer), к ContentProvider (заодно вспомнишь/поверхностно изучишь SQLite), к Service, IntentService, BroadcastReceiver (сначала смотришь официальные доки, потом делаешь проект, о startandroid забудь как о страшном сне), потом можешь глянуть для общего развития что такое AIDL.
Все посмотрел? Отлично, теперь подумай как это должно работать вместе. Советую первое серьезное приложение писать без использования каких-либо фреймворков. Мне, например, весьма понравилась апишка от микрософта по их Graph API, на ней можно воткнуть что такое REST, поработать с WebHook-ами и прочим весельем, тебе придется делать кастомные парсеры и прочее прочее. Параллельно смотришь и вдохновляешься Google Material Design.
Сделал REST-клиент для выбранного endpoint-а ? Отлично, теперь попробуй поработать с пуш-уведомлениями и сокетами. Создай свой простенький сервер на локалхосте и ебись с ним как захочешь. Во-первых это научит тебя выставлять требования к ребятам на бэкэнде, посколько ты будешь понимать, что тебе нужно и какой вид оно должно иметь, во-вторых, просто посмотришь в сторону популярных серверных технологий и паттернов, лишним не бывает.
Поработал на низком уровне и разобрался как что функционирует? Время открывать чудесный мир фреймворков для себя. Начни с самого популярного - OkHttp+Retrofit+Gson, посмотри в сторону какой-нибудь ORM-ки, или (да простит г-дь) монстра типа Realm/StorIO/еще какой-нибудь параши, попробуй в инъекцию зависимости с Dagger-ом, научись в тестирование.
Дальше, если дойдешь до этого момента, думаю, сам уже поймешь что делать, но если что - обращайся!
>>933663 Спасибо, милчеловек! Вообще, "Философию Java" я освоил еще полгода назад, но до сих пор иногда почитываю. Можно ли с учетом того, что мне не придется ее заново перечитывать и что я уже немного помацал SQLite осилитт все это до начала (конца) лета?
>>933674 У меня ушло чуть меньше двух лет, чтобы выйти на уровень "опишите стек технологий, почитаю доки если че непонятно и скажу вам срок выполнения". Но если у тебя хорошая подготовка (ладно, будем честны, если у тебя есть хоть какая-то подготовка) то до этапа "фреймворки" дойти должен успеть
>>933674 Даб к слову, я придерживаюсь мнения большинства, философию нужно периодически (раз в три-четыре месяца) перечитывать. Во-первых там треть вопросов с собесов покрывается, во-вторых, ИМХО, приятно читается.
Можно ли предотвратить открытие активити вызова? Ну то есть у меня в приложении есть видео общение и тут пользователю звонят, я хочу показать диалог/нотификацию мол у вас тут вызов думайте куда отвечать, а не так что бы активити вызова тупо открылось не давая пользователю шанса не выходить из моего приложения. Ковыряю пока TelephonyManager но еще не нашел похожего.
Вечер в хату, арестанты. Подскажите, нужно из изображения удалять его фон, например, сфоткана вещь на кровати, нужно оставить вещь а весь задний фон сделать прозрачным. Фон всегда разный так что сравнивать изображение фона с конечным не вариант. Смотрел на opencv, но по яве не нашел никакой инфы, а с плюсами не горю желанием сношаться. Какие варианты подскажете?
>>932880 Пацаны помогите разобраться с viewpagerом и adapterами всякими, чот нимогу раскурить. Смотрел в оф доках как работать с ним и фрагментами. Смотрел на стартдроиде статью. Я чет не догоняю никак как это все утсроено. Паможите!!!
>>933965 Можно вызвать в нужном тебе месте метод notifyDataSetChanged(), который уведомит адаптер, что нужно отобразить измененное содержимое. Все манипуляции производить с данными в последовательности, которую передал адаптеру, потом вызывай notifyDataSetChanged(). Это можно прям из активити делать.
>>933970 А как изменять индексы страниц у вьюпейжера? можно как то отказаться вообще от позиций вьюх? типа 1 страница поумолчанию только. Но когда свайп случается билдится вторая или предыдущая.
В андроид студии можно как-то изменить цвет счетчика строк? Красные слишком выделяются на фоне всего, отвлекают и вообще глаза разъезжаются, я так косоглазым стану. Отказываться от белой темы и стирания шишки на сотни строк в день не хочу.
>>933663 Если я .NET помидор с 6летним стажем, могу ли я не читать философию жабы? Глянул на синтаксис - от шарпа существенно не отличается. Я так понимаю, что это книга для разного рода вкатывальщиков, которые не имели дело с чистым ООП.
>>934030 Ну например тот же C++, который является от части структурным языком в подмножестве C. Т.е. существование функций, которые живут вне класса. Так же можно упомянуть про всевозможный сахар аля C#, который позволяет обходить ограничения, которые могут возникнуть в Java, решаемые там с помощью использования паттернов те же ивенты и делегаты. Мультипарадигменный ЯП, который лишь предоставляет ООП как возможную парадигму написания JavaScript
Java - сферический ООП в вакууме. Я считаю, что если ты помидор, знающий паттерны хуяттерны, то читать книжку, которая представляет их как часть философии - нахуй ненужно.
>>934060 > из хмл описания виджетов объекты создаются Если тебе нужно описание внутреннего устройства, то я тут тебе не помошник сам вкатываюсь. иначе не спрашивал бы про необходимость изучения жабы по философии. А так из того, что знаю - LayoutInflater все делает.
> и как с тем же вьюпейжером разобраться в смысле, как сбрасывать вьюпажер при поворотах экрана? Честно говоря, сам не знаю. Чому в гугле не спросишь?
>>934072 Не, я хочу бесконечный вьюпейжер сделать, где типа у него только три фрагмента. Когда свайпаешь типа все красиво свайпаецо на левый или правый фрагмент, но после окончания свайпа я хочу перегенерить позиции вьюпейжера, чоб было как до использования свайпа. Типа в текущей памяти три фрагмента, текущий, левый и правый они не видны. При свайпе перелистывается например на правый фрагмент. Дальше вот хуй пойми где код писать перестроения всего этого дела. В пэйжер адаптере или в пейжер фрагменте или допиливать вьюпэйжер.
А про инфлейтор хмм что он вообще делает, можешь если не сложно на пальцах как дауну пояснить.
LayoutInflater.from(%context%).inflate(R.layout.%layout_name%) просто создает View по айдишнику лэйаута. Потом из этой View ты можешь через findViewById доставить всякие конторы, которые ты в этом лэйауте определил. В принципе нихуя сложного.
>>934088 Мм, да я это видел, но а б с страницы типа будут по кругу скролится, но типа надо чтоб данные то менялись в них. Для этого завести какую нибудь глобальную переменную, которая взависимости от свайпа +-1 делает и уже от этого в пэйжере контент выводить?
А еще вот пэйжадаптер, он логически отвечает за информацию подаваемую в фрагмент? Тоесть пэйж адаптер знает что третья страница и достает инфу из третьей строки в бд и передает в фрагмент, где тот уже запихивает переданые поля из адаптера в свой фрагментный лэйаут.
Обратный вопрос. Как вкатиться в разработку из Android. Есть смарт, но под Android даже нормально блокнотика и SSH клиента не нашел. Нашел убогий SSH клиент под свободной лицензии и тот даже ключ добавить не дает. Как поставить какое-то окружение на эту недосистему вообще незнаю. Рута нет. Получить через уязвивость в кит-кат незнаю как.
>>934344 Ебанашка пытается выебнуться тем, что удачно копипастит готовые примеры. Да ты же утрешься при первой же нестандартной задаче, которую не реализовать стандартными средствами без киянки и мата.
>>934360 Надеюсь, тогда найдется ЧСВшный хуесос, который встанет и ололокая пустит тебе тугую струю в ебало. Из-за такого говна вот и не хочется куда-то идти, кроме как на stackoverflow.
Поставил Xamarin поверх студии. Создаю пустой проект. Запускаю. На эмуляторе черный экран. Даже не запускается операционка. Иногда после завершения пишет, что были проблемы с деплоем, а иногде не пишет. Это на дебаге. На релизе сразу говорит, что проблемы с деплоем. При этом никаких ошибок или ворнингов не выводится. В чем может быть дело? До этого ставил андроид студию и там было всё нормально, но мне нужно на шарпе делать.
>>934375 Ясно, латентный мазохист ожидает, что другие оценят его попытки при чинить добро.
Насколько нужно быть ебанутым, чтобы бомбануть от нубасного вопроса, а потом (!) полезть искать ссылку для ответа. А потом еще и выебываться.
Блядь, даже вот не думал, что pr собрал такой гной из профессии. Неудивительно, что здесь так тихо. Безрукие агрессивные ебанашки-копипастеры разгоняют всех адекватов.
сап, сообщество! реквестирую хелпы в тривильном вопросе public class Example { public static Example get(Context context){ }} Это именованный конструктор или как?
>>934492 Example слева от get - это возвращаемый тип. То есть это статический метод, который возвращает экземпляр этого класса. Метод класса, грубо говоря, а не экземпляра.
>>934502 Ну да, может там в методе какая-то хитрожопая инициализация, и дополнительная обработка (что и отличает от простого создания через конструктор) которую не хотят доверять тебе?
Необходимо сделать приложение, которое будет по Bluetooth опрашивать устройства и сохранять в файл/отсылать в базу/показывать на экране данные. В принципе оно сейчас это делает, но Bluetooth создается объектом в MainActivity c соответствующими последствиями. А мне нужно, чтобы соединение не терялось при переходе из одной Activity в другую (и полученные данные обрабатывались по-разному соответственно). Как грамотно сделать подобное? Что почитать про Bluetooth? Я так понял, нужно мутить Service, в правильном направлении копаю?
>>934671 Вариант для обрыганов - синглтон/инстанс блютуса в апликешоне. Вариант для норм пацанов - блютус в сервисе. Возникает два варианта - сервис который ты сам стартуешь и который стопается тобой же, из форграунд нотифкации или аллаха. Вариант второй - байндишся при старте активти и анбайдишся в стопе, если юзер переходит на следующее активити товего приложения то сервис не помрет, в обоих вариантах можно организовать общение через байндер и будет ништяк, ну или бродкастами хуярить. >что почитать Доку для начала. Тем более если приложуха уже умеет все что надо из активти то и читать особо ничего не надо, кроме существующего кода.
>>934698 Сервисы хранятся в дебрях активист менагера, и когда одна активитя стопается и анбайдится сервис подождет старта следующей, а там и байнд есть, ничего не пропадет, проверено музыкальным плеером и вебртисишным аудио/видео чатом. Еще можно форграундную нотификации бахнуть.
>>934870 На хуеми, который больше одной залоченой приложухи не держит - норм, на мейзу тоже. А если китайфон не тянет то пусть нахуй идет. Андроид нигде гарантии не дает что все будет круто, но форграундную сервис это как форграундную активитя и грохать ее будут в самом крайнем случае.
Есть вопрос касательно гитхаба. Я скачал Git, запилил аккаунт на гитхабе. Делают пуш из Android Studio - коммит отображается как совершенный с аккаунта Git, а не гитхаба. Как исправить? Не вручную же кидать файлы...
Купил Huawei P9 lite, телефон хороший, но есть одна проблема... Иногда(весьма часто) не пробрасываются ошибки и ты сидишь, кучу времени пытаешься догадаться, что наебнулось. В гуглах ничего вразумительного не нашел, с другими телефонами таких проблем нет. На нём стоит Android 6. Были у кого-нибудь похожие проблемы?
Constraitlayout в студии так требователен к железу? У меня дикие лаги когда я им пользуюсь, перетащить что то на макете невозможно из за лагов. А если и получится, то одно неверное движение и все сбрасывается.
>>935015 Червь пидор, в архивах и папачках храни типа Laba1_21072006, Laba1_210720061701, Laba1_21072006_1vasya_edit.rar А про гит забудь не твое это не лезь туда. Через пару лет когда окончишь школу можеш попробовать но только под надзором взрослых
Нормально ли хранить различные приватные данные (ключ шифровки бд, ключи api и прочее) в gradle.properties (своем .properties файле) и доставать их оттуда в каком-нибудь ленивом синглтоне в java-коде ?
>>935653 >Нормально Нет. На клиенте не должно быть ничего "секретного". Может ты и сертификат в assets пихаешь? Ключи апи (гугл хуялитика, вк хуяпи и тд не секретные данные если чо)
>>935760 Конкретней, что ты считаешь секретным? Есть множество замечательных статей, которые поясняют, что как бы ты не изъебывался за сравнительно не долгое время все на твоем клиенте вынюхают и реверснут.
>>936057 Прости, но с таким же успехом можно подружить с сервером со своего устройства, и оттуда вытащить те же ключи. Разницы будет - 0. А вот как ты после DexGuard-а что-то с клиента, подверженное, вдобавок, дополнительной обфускации, вытащишь 0 мне стало интересно уже
>>936199 Ну расшифровывать ты все равно будешь на бэкенде. Так что там же. >>936344 Сервер взломать сложнее, чем декомпилировать и деобфусцирвоать твой хуевый жабокод. Мобильное приложение - фронтенд. Нахуй нужен бэкенд, если твоя мобилка сама себе секьюр.
>>936353 Может чтобы разгрузить твой клиент от ненужной хуйни ? Мне собственно интересно, как ты хранишь ключи апишек, например, или ключи от базы данных с пользовательскими данными (и не пизди, что ты не делал ни одного приложения с ними, ога), ну или токены, что самое банальное ?
Есть вьюшка, а ней прикручен OnTouchListener. Все замечательно до тех пор, пока вьюшка не разблокируется через setEnabled(false) Проблема в том, срабатывает эвент ACTION_MOVE, а ACTION_DOWN нет - ведь вьюшка была заблокирована в момент приложения пальца.
В итоге получается очень не желательное поведение, которого должно происходить, только если был эвент ACTION_DOWN.
Как игнорировать все эвенты, перед которыми не было ACTION_DOWN?
Ничего не приходит в голову, кроме как в onDown() ставить переменную в true, а в другом месте проверять и после действия ставить обратно в false.
>>936460 Блядь, хуепадла ACTION_DOWN втискивается еще до блокировки вьюшки, и затаивается там, как сука крыса на весь процесс блокировки. А потом продолжает свое дело как ни в чем не бывало.
Видимо, вместо setEnabled придется еще и откручиватьэ\прикручивать OnTouchListener.
Котоны, помогите оценить стоимость работ: нужно приложение для андроид 5+, авторизация + 4 въюхи. Данные берутся по JSONRPC и отображаются в виде текстовой информации на вьюхах, бэк сервер готов
>>936378 Маня. Обфускация - не панацея. Ты же не будешь например хранить secret_key в четырежды минифицированном js на странице. Отличие минифицированной жсины от обфусцированного жабоговна отличается лишь необходимостью декомпиляции последнего. Конечно, ты можешь хранить апи ключи в клиенте сделав многоходовочку - есть надежда, что просто не будут там искать.
Подскажите какие нибудь более менее крупные проекты, которые можно понюхать. Дрочить мелкую хуйню по мануалам заебало. Свои проекты делаю, но иногда все же хочется посмотреть на нормальные проекты, пишущиеся командой людей, где все более менее по феншую. Щас вот открыл дашчан пока что.
А как можно в чистой архитектуре дядюшки Боба использовать сервисы, AccountManager и прочие контексто-зависимые классы ? Вроде и в Activity/Fragment пихать не хочется, а вроде и в data layer контекста быть не должно
>>937142 В дата леере контект какраз таки плавает, ибо там в любом случае приходится иметь дело с интернет конекшном. Остальные классы либо во вью, либо в дате.
У меня есть активити, с которым связано 3 *.xml файла: activity_layout.xml activity_content.xml cardView.xml
так вот в контенте у меня RecyclerView из CardView на CardView кнопочки, как мне написать для них обработчик нажатий и как привязать к обьектам, чтобы кликнув по карточке я мог получить id обьекта, который эта карточка представляет?
Сап, почаны! Опять реквестирую ответ на глупый вопрос: почему многие методы стандартной библиотеки начинаются с on? onStart, onCreate, onSet.., это специальная синтаксическая приблуда закрепленная традиционно или как? Или есть спец смысл?
>>938483 Или нужно сделать анимацию без повторов, а уже в ее AnimationListener выполнять метод, который сделает что нужно и запустит другую анимацию, которая движется в обратную сторону (а в конце запустит первую)?
Ребят, почему используя Retrofit последней версии я получаю Exception: Cannot read raw response body of a converted body при попытке прочесть сырой body? String raw = response.raw().body().string()?
Есть одно активити, оно запускается как popup, тоесть занимает не фулл экран, на фоне видно активити с которого я его запускал. Как сделать чтобы фоновое активити было темнее, чем popup? Как сделать анимацию, чтобы popup появлялся снизу вверх?
>>939397 У активностей можно переопределить анимацию через overridePendingTransition. > Как сделать чтобы фоновое активити было темнее, чем popup? Че? >>939531 > алерт диалог или диалог фрагмент Менее удобно же, с активити есть ламповый onActivityResult, а не богомерзкие колбэки. С просто алерт диалогом нихуя не удобно работать, если тебе приходится setView делать.
>>939560 Никак. Показать ему диалог с инфой что без разрешения кина не будет, и выдать он его может в настройках, можешь даже сделать кнопочку которая его в эти самые настройки кидать будет, с помощью интента.
>>939711 ПРОСТО берешь и запускаешь интент ACTION_PICK В результате получишь uri к файлу, если ты не с помощью DocumentProvider'a делал, то прийдется попросить пермишен на внешнюю память. А дальше берешь одну из сотни кропалок с гитхаба и без задней мысли кропаешь.
Сап /pr/, есть один RecyclerView. Нужно сделать чтобы даты выводились как в скайпе. Всегда висела полупрозрачная дата сверху, а при скролинге встраивалась в divider. Есть варианты?
>>940002 Хуйня будет. Делаешь тип вьюхолдеров для дат, они будут в общем списке. А по скролу берешь у LinearLayoutManager'a первую и последнюю частично видимые позиции, дальше опираясь на свой список данных чекаешь есть там интересующая тебя дата или нет. Если есть прячешь отдельную вьюшку, показывающую дату, иначе делаешь ее видимой, как-то так, но я пиздабол с двача и возможно это будет не эффективно/не красиво.
Небольшое приложение состоит из одной активити и кучки фрагментов которые добавляются/заменяются/удаляются когда нужно, иногда используется back stack. Как правильно сохранять состояние иерархии фрагментов на случай если активити терминируют?
>>940072 > Бэкстек фрагментов сохраняется Я значит неправильно причину определил. У меня один фрагмент добавлялся в активити при создании (в onCreate), и потом он заменялся (когда нужно) на второй с помощью replace. При пересоздании активити фрагменты накладывались друг на друга. Я думал что там с бекстеком какие-то пиздарики, - но проблема в том что первый фрагмент добавляется всегда, и при восстановлении активити - кода он уже в бекстеке и новый добавлять не нужно. Какой нормальный способ следить за подобным? Конкретно в моем случае достаточно проверить глубину бекстека, это норм подход или нужно что-то более надежное писать?
Каким образом можно проиграть анимацию до закрытия активити? То есть мне нужно при создании или уничтожении активити проигрывать анимации появления/пропадания вьюх в активити. С анимациями при создании активити разобрался, а вот при уничтожении чёт не могу. Пробовал пихать анимации в finish() и onDestroy(), но они само-собой убивают активити прямо во время отрисовки анимации. Мне же нужно что бы оно подождало завершения анимации. Возможно ли это вообще сделать без фрагментов?
>>940176 > Мне же нужно что бы оно подождало завершения анимации Берешь onBackKeyPressed, вызываешь в нем анимацию без super, в onAnimationEnd - finish. Но это похоже на лютую хуйню, что ты пытаешься сделать.
>>940267 Вот типа такой хуйни пытаюсь сделать - https://developer.android.com/design/material/videos/ContactsAnim.mp4 Там прежде чем закрывается активити floatingActiobButton сворачивается в точку. Соответственно при создании активити она восстанавливается обратно. Т.е. у меня будет куча анимаций (на каждую вьюху) и мне надо было сделать функцию, которая бы их все вызывала при открытии и при закрытии активити.
>>940352 Так-так. Вот тут по подробнее. Мне вообще что нужно - чекнуть бд на предмет записи, если запись == null, то вызвать функцию. Если запись != null, то сделать реквест на сервер, получить ответ, сохранить его в бд и вызвать функцию. Получается, я могу этот запрос сделать из flatMap? Но как тогда быть с вызовом функции? Бросить эксепшон и вызвать её в onError? Так бы не хотелось делать.
>>940390 >Зачем тебе onLoggedIn() в onError, у тебя такого не было. Короче там суть в том, что эта функция вызывается в любом случае. Она запускает новое активити, даже если произошла ошибка. Просто само активити будет работать либо в гостевом режиме (если в бд не было логина и пароля) либо не в гостевом (если логин и пароль в бд были и авторизация прошла). Вообще, наверно, лучше поменять их на две разных функции.
>Есть же Observable.error, этот метод лучше чем throw. Запомню.
>>938520 Дожили, открыть консольку и ввести одну команду умственно-остальным дегенератам уже сложно, им подавай жирную иде на скачивание чтобы разово собрать какую-то срань.
Аноны, есть один сервис, у сервиса есть API. Сейчас вот задумали писать под него в том числе Android-клиент. Подскажите, какой библиотекой проще всего организовать отправку и получение данных по POST в Android? А то я вот сейчас читаю и понимаю, что вариантов дохуя, при этом половина уже deprecated Что нынче в тренде по этой теме?
Котаны, поясните за Xamarin плиз. Я тут просто попробовал пару приложений накатать совсем простых. И вроде все удобно и интуитивно понятно после AndroidStudio. Поясните, кто любит, кто ненавидит и за что, почему...
Антоны, шо за хуйня? Мне кажется, или блять все дружно решили вкатиться в андроид весной? я уже 1.5 года ебусь с джавой и андроидом, а тут набежало блять стадо с вопросом "как установить андроид студио", заебала уже эта ебаная ревность, аноны. Я из Харькова, аноны. Так вот, знаете, у нас общество делится на две категории, угадайте блять какие - фотографы и айти. Все вагоны в метро облеплены рекламой "обучим макакингу за нехуй делать и за ваши деньги", айти-школ больше чем детских садиков. На днях мне блять звонили с ШАГА УГОВАРИВАЛИ прийти к ним! переодически наталкиваюсь на комменты в стиле "вакансий джунов давно нет, идите нахуй". Знаете, все это как-то демотивирует и разрушает мои розовые мечты о светлом будущем, хоть я и такой же как все остальные, когда въебала крыза пошел в айти (но пока не дошел), но страшно бесит эта массовость и как-то хочется идентифицировать себя как уникальную личность, но не поулчается. Все. Очень. Плохо.
>>962204 Та же хуйня, решил вкатиться в ведро потому что думал, что веб и энтерпрайз это мерзко, а на всё остальное вакансий всё равно нету. Только я ещё и живу в ебенях, и в отличии от тебя мне надо переехать и снимать хату и ещё мне 27. Впрочем, если ничего не получится, то думаю выпилиться, так что похуй, уже можно сказать смирился.
> Хочу вкатиться в разработку под Android! С чего начать?
Большинство приложений написано на Java, выучить её на хорошем уровне — это первое, что необходимо сделать. Рекомендуемую литературу см. в Java-треде.
После этого можно установить Android Studio, открыть официальную документацию http://developer.android.com/training/index.html и попробовать создать по туториалам своё первое приложение.
В дальнейшем потребуется базовое знание SQL, понимание XML и JSON.
> Мануалы?
- Официальная документация: http://developer.android.com/
- Полезный гайд для начинающих и продвинутых: http://guides.thecodepath.com/android
- Бесплатный видеокурс от Google для новичков: https://www.udacity.com/course/android-development-for-beginners--ud837
- Два ресурса, единственный плюс которых — русский язык: http://startandroid.ru/ и http://developer.alexanderklimov.ru/android/
- Классика, способная дать ответ на почти любой вопрос "Как сделать xyz?": http://stackoverflow.com/
> Не хочу писать на Java!
- Kotlin — JVM-совместимый язык от JetBrains. Есть лямбды, стримы и делегаты. Можно использовать в проекте вместе с кодом на Java.
> Есть что-то кроме нативных приложений на Java/Kotlin?
- Qt — кросс-платформенный фреймворк на C++. Используется в основном для игры и для приложений с высокими требованиями к производительности (обработка изображений, звука, ГИС-системы). Спрашивать в C++ треде.
- Xamarin — кросс-платформенный фреймворк на C#. Представляет из себя обёртку над Android API. Куплено Microsoft. Теперь есть бесплатная версия. Спрашивать в C#-треде.
- PhoneGap/Ionic/Titanium/ReactNative — имя им javascript, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная как и размер комьюнити. Вопросы по ним — в js-тред.
- BugVM — кросс-платформенный фреймворк, написанный на Java. Форк невинно убиенного RoboVM.
> Хочу писать игры!
LibGDX или Unity. Спрашивать в /gd/.
> Что нужно, чтобы взяли джуниором? Что учить в первую очередь?
Нужно хорошее знание Java, понимание базовых принципов Android (жизненный цикл activity/fragment, что такое Context, intents, services, UI thread, support library, shared preferences, SQLite), знание популярных библиотек типа Retrofit + Glide/Picasso. И хотя бы оно готовое приложение.
Предыдущий тред: https://2ch.hk/pr/res/902606.html