Вы видите копию треда, сохраненную 6 мая 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
> Хочу вкатиться в разработку под 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 (М)
>Это не учебник а скорее справочник. Но годный. Не повторяй моих ошибок - не вкатывайся начиная с него.
Почему? Он идеально по типу От простого к сложному. Может ты реально Справочник Шилда использовал.
Потому что у него по языкам есть как учебники так и справочники.
Я по Шилду шарп изучал немного. Теперь буду использовать как справочник потому что у них очень много общего с Джавой.
Вагина тваей мамашки защемила хуй маги.
Откуда это?
Может сначала лучше человеку с неокрепшей психикой Эккеля почитать, дабы вкатиться ?
Трапы закончились ?)
Вкратце программа на ближайшие лекции четыре-пять выглядит так:
1) Сборка проекта. Управление зависимостями
2) Стандартные компоненты. Составляющие приложения
3) Проектирование UI и верстка
4) Пакет java.util.concurrent. Асинхронное выполнение задач
5) Работа с базами данных. Пакет android.database
6) Обращение к сети. Пакет java.net
7) Шаблоны проектирования. Архитектура приложений
8) Unit-тестирование. Функциональное тестирование
Добавь
0) Kotlin
А вообще взял бы современную книжку по android с хорошими отзывами и заюзал бы ее оглавление
Хуйня какая то для хипстеров.
ну это же только для получения токена, а открыть браузер и получить от туда "code"
Да, я знаю, что есть ellipsize="end", но оно не подходит тем, что может обрезать слово посередине. Например : "слишком длинный те...". А мне нужно, чтоб все слова оставались целыми, если уже и приходится обрезать, то часть слова не оставалась.
Кто-то такое реализовывал или возможно знает как такое сделать?
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(%юрл сюда пихай%));
startActivityForResult(intent, 228)
Реально попутал. Один фиг там сначала этот учебник встроен.
Я пока додумался вот до такого: есть фтп-сервер, на котором лежит справочник в виде xml, справочная информация в виде html-страниц. При каждом запуске или по таймеру приложение коннектится к этому серваку и скачивает эти данные, если они изменились.
Делаю своё первое относительно большое приложение практически с нуля, поэтому не знаю, как вообще подобные штуки реализуются. Этот способ мне показался наиболее простым.
Или может как-нибудь по-другому это можно реализовать?
>смотри что такое productFlavours
Product flavours это для сборки разных версий одного приложения. А нужно: базовое приложение + модули расширений. Например у меня есть com.example.app и я хочу что бы пользователь мог поставить модуль расширения com.example.app.extension с возможностью вызывать методы из этого пакета в основном приложении com.example.app
Ебал тя в глотку.
>За недельку
>склепал аппу на 1500 строк юзающаю retrofit для openweather, picasso, Google maps api. Из корного: лоадеры, адаптеры, анимации, фрагменты
Представляю какое у тебя там месиво и спагетти из г####-кода :)
Да ладно тебе, в 1,5k строк наврядли реально месиво сделать, даже если в одном классе все. Это нужно талант иметь (не иметь)
1) На определенном экране подписываюсь на обновление конкретной таблицы в базе (storIo);
2) Получая обновления отображаю их;
3) По клику на кнопку делаю всякие другие штуки;
Вроде как с первым и вторым пунктом все понятно, проблемы возникают с третьим, вот наивный вариант:
http://pastebin.com/LLVfvWdS
Я попробовал с сабжектами, гляньте может где ненужная аллокация новых обсервеблов, или можно проще:
http://pastebin.com/AwKSsQ9C
Нуб то нуб. Но кодю года три, олимпиадник да и кто такая банда четырех знаю. Просто до этого кодил лабы, всякую херь да курсачи/дипломы.
upd: Может ли кто то заодно подсказать куда копать что бы при удалении элемента карточки из ресайкла запилить анимации передвижения карточек. notifyDataSetChanged просто перезапускает адаптер как я понимаю.
Вот то что выше в прямом смысле - карточки мест с картинкой, дистанцией до заданной локации и погодой в этом месте. Их можно добавлять, да модифицировать - указывать ссылку нахождения пикчи или выбирать ее с помощью файлового менеджера. Локацию вводить гмапс апи. Все правослано через провайдеры/лодеры/адаптеры. Настолько что точно пойду учить реакт ради нахваленого выше сторио.
И могут ли быть на собеседовании вопросы про внутрянку HTTP(Не только что такое гет/пост а и расписать что еть что в запросе и как его сформировать , можно ли вкратце рассказать про OkHttp?) или внезапно HTML(стоит ли повторять, разметку я то прочитать могу, а вот с ходу написать что то нет)
Хотелось бы угореть по MVP, собрал за некоторое время кучу статей. К сожалению, большинство из них очень короткие и описывают в общих чертах что это за архитектура и потом набрасывают пример который и без MVP бы не умер.
Некоторые ещё и предлагают использовать свои какие-то васянские либы-реализации MVP использовать (в туториалах обучающих MVP).
Короче, я хотел бы изучить вопрос в минималистичном сеттинге, где все интерфейсы пишутся и реализуются с нуля, и если используется хуйня типа Rx, event bus, DI или ещё чего-то, то только после того как появились проблемы а не сразу блядь всё.
Проходил какой-то мини-туториал от гугла что-то там про тестирование. Сделали годно, но может есть что-то более развёрнутое?
Много там в киеве джунопозиций? Я что-то по объявлениям не сказал бы. Сам думаю вкатываться джуном по весне, но мне надо будет переезжать.
Вообще, не хотел бы ехать в киев, предпочёл бы одессу или львов.
Впрочем, судя по количеству вакансий может ещё никуда не поеду и пойду работать на стройку. Кто что может пояснить за джунские позиции в украине?
>Не школьные олимпиады
А ну это другое дело, так домашку уже сделал?
Ну честно, я понял - ты можешь препод тебя натаскал решать стандартные задачки из учебников.
Плюс ты пролистал GoF и вызубрил ты же олимпиадник паттерны aka фиксы ущербности ООП.
Хотя лучше бы SICP осил бы или Haskell.
Но с чего ты взял, что ты можешь стать хорошим программистом и писать понятный и поддерживаемый код?
Потому что мне нравиться кодить, мне интересна платформа и я хочу изучать ее. Или у нас в кодерах только те у кого на левой ягодице метка, спец службы находят их и они в яслях пишут проекты на миллион? Я не ебаный избранный Нео. Но я хочу въёбывать над тем что мне интересно.
С зубрежкой хуево кстати.
Кодь и не обращай ни на кого внимания, можешь даже код понятный не писать. Про олимпиады, впрочем, никому не рассказывай в контексте разработки.
https://developer.android.com/training/basics/supporting-devices/screens.html
notifyItemRemove? можно еще в сторону diffUtill посмотреть, люди его советуют юзать. Но у меня пока руки не дошли
Какие ему нужны системные требования-то? Нет среды разработки полегче? Как мне быть то :(
2гига ram, 2 ядра на пассивном охлаждении, до этого момента с тормозами не сталкивался
олимпиадник в общем то может рассчитываться как оскорбление, ибо олимпиадный код всегда нарушает овердохуя правил нормального кода проекта
>Виснет "намертво" после долгой загрузки главного окна.
Попробуй увеличить heap до 1Gb
>Нет среды разработки полегче?
Eclipse
> А что вы все время разрабатываете?
Очередной клиент к рестопараше, тысячи их.
КАЧАЙ @ ПОКАЗЫВАЙ @ КАЧАЙ @ ПОКАЗЫВАЙ @ КАЧАЙ @ ПОКАЗЫВАЙ @ КАЧАЙ @ ПОКАЗЫВАЙ
Уже блевать охото.
Что ты так боишься ебли с нейросетями, бля? Все эти распознавалки хуйни давно закодили.
А вообще, углубление обычно идёт в конкретную область. Например, какая-нибудь специфическая ебля с системными настройками, через всякие дырки в системе. Или там сетевой клиент по какому-нибудь протоколу. Или ещё какая хуйня со сложными вьюхами
>вкатиться джуном в киев
Чувак, джуны в киеве не нужны уже как пару лет. Тебе надо думать об иммиграции
Я бы немного рассказал про процессы в юниксе, UI-поток в ведре. Потом структура приложения и схема его работы. Потом - активити и прочее
а в иммиграции джуны нужны что ли?
Просто осознай суть, и пили свой велосипед, который будешь на протяжении нескольких проектов подтачивать. MVP у каждого свой, вопрос предпочтений же. Можешь посмотреть статьи Mosby о его вариации
фи, а кто будет делать разный дизайн для телефонов, 7' и 10' ?
1) подключаемся на прослушку сокета после получения токена сессии, все сообщения полученные по этому каналу сплитим, в зависимости от данных в json-ах, приводя к нужным типам данных.
2) после получения обновления - пишем в базу, с использованием реактивной DAO обертки. Суть в том, что далее все подписчики по нужным эвентам будут извесчены что есть новые данные в таблице и будут получены с их стороны данные об измененном/добавленном ресурсе.
3) подписчик в лице презентера соответственно подписывается в начале жизни на нужный DAO, буфферит изменения, как только к нему байндится вьюха - сплевывает в нее свежие данные из бд. Так же обновляет в реальном времени.
Меня лично пугает немного сложность, когда расписываю это на словах. Но поскольку нужно, чтобы все быстро грузилось, и показывались обновления в реальном времени (а пинг до сервера около полутора секунд) - понятное дело нужно ввести кэш, и более вменяемой реализации его я не придумал.
Expiration будет скорее всего просто по количеству записей. То есть храним n-ное количество переписок, обновляя данные по ним, когда создается новая или старая выходит в топ - трем каскадно все таблицы связанные с перепиской последней по обновлению и вносим новую
> что же сделать такое, чего нет?
Найди работу ba dum tss*
тогда и не будешь задавать такие тупые вопросы
>нужно, чтобы все быстро грузилось, и показывались обновления в реальном времени (а пинг до сервера около полутора секунд)
Для мессенджера как по мне похуй, мне тян не отвечают по полтора часа а потом пишут извини занята.
Если делать таймер через залупленный CountDownTimer - телефон не войдет в sleepmode так?
Я правильно понимаю, что такое нужно делать через AlarmManager?
Но ведь из AlarmManager нельзя вытащить прошедшее время, а мне нужно, чтобы при открытии activity отображался актуальный счетчик оставшегося до исполнения времени.
И при этом, чтобы телефон мог баиньки. Как усидеть на двух стульях?
Что думаете про такой вариант?
1) Activity сворачивается\умирает
-CountDownTimer останавливается записывается текущее время\дата ирл.
-Стартуется AlarmManager с оставшимся временем на счетчике
2.1) Если до конца таймера activity не возобновляется - AlarmManager делает свое черное дело до конца.
2.2) Если до конца таймера activity возобновляется - AlarmManager прибивается, вытаскивается сохраненное время\дата ирл и сравнивается с текущим время\дата ирл, чтобы определить сколько времени прошло.
Как еще можно сохранить счетчик, не насилуя батарею?
Не слушай даунов, кодинг — примитивный макакинг (особенно когда идёт речь про мобилки или веб) и стать кодером может вообще любой, не нужно утруждаться вопросами «смогу ли я». Просто делай и всё будет хорошо.
А олимпиадник это даже плюс, довольно хорошо развивает как программиста и даёт некоторые навыки написания эффективного кода.
Создал файл .nomedia, почистил кэш, остановил службы, отвечающие за галерею (вроде как все), ребутнул смартфон и все-равно этот ебучий андроид добавляет мою порнуху с понями в галерею.
В WPF он есть. В AngularJS он есть. В андроиде вообще нихуя нету? Только MVCP, только хардкор?
Так это ОП и есть. Ты ньюфаг что ли?
Хочешь MVVM — бери и делай MVVM.
> В андроиде вообще нихуя нету?
Архитектура в твоём приложении, а не в андроиде.
Архитектура может быть ограничена сдк ведра, тот же злоебучий контекст например.
Ну и какая тебе нахуй архитектура, если ты даже от контекста абстрагироваться не научился? Возвращайся, когда поумнеешь, тогда можно будет и архитектуру обсудить.
Потому что он может содержать больше/меньше информации чем нужно пользователю. В presentation-слое у тебя должна быть модель со всей нужной информацией для показа на экране.
Пример: отобразить информацию о покупке приложения, в domain-слое у тебя будут отдельные TransactionInfo, ApplicationInfo, в presentation ты передаешь какой-нибудь ApplicationPurchaseInfo в котором будет только то что нужно для отображения на экране.
В случае изменений в TransactionInfo или ApplicationInfo они останутся в domain-слое.
На примеры лучше не смотри, они говно, вот например репозиторий с 7к звезд, найди два отличия:
https://github.com/android10/Android-CleanArchitecture/blob/master/domain/src/main/java/com/fernandocejas/android10/sample/domain/User.java
https://github.com/android10/Android-CleanArchitecture/blob/master/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/model/UserModel.java
В андроиде есть DataBinding - https://developer.android.com/topic/libraries/data-binding/index.html - тот же WPF но сильно упрощенный.
Но я считаю что писать код в xml это зло, если так хочется mvvm, смотри в сторону Rx bindings
Спасибо бро.
Зло, описывать всю логику взаимодействия контроллера с вьюхой через биндинги. Но для простецких задач, типа, привязки полей модели к инпутам вьюхи - вполне себе норм. Не нужно писать кучу ненужного кода и заняться решением бизнес задач.
В StorIO есть rx обертка над ним. А так - нет.
Ну в общем то, была бы она на rx2 - я бы не рыпался, но увы. Поскольку проект висит на rxJava2 - то не могу позволить себе подключить первый только ради этого
А зачем тебе общая абстракция для сервера и базы? Это как-бы разные вещи. Или у тебя ремоут база с которой ты тоже по хттп общаешься?
Пытаюсь попробовать на уровне модели разобраться со свичем между загрузкой с сервера и из базы с сохраненными ранее данными
Я так понял, модули ты пишешь не для себя, а для компонента, который будет их использовать. В смысле, ты в коде модулей вообще не касаешься. А как тогда использовать конструктор, чтобы передать тот ж контекст?
Или я все неправильно понял?
вывод показал кучу несоответствий стандартам POSIX. Как Андроид работает с этой датабазой несоответствующей POSIX?
Юниттестировать классы, работающие с бд - пердолинг, бесполезный, если все делать по правилам.
Куча ненужного кода, который уже реализован в тестируемом классе. А использовать уже написанный нельзя - ведь "азаза не независимый тест". В итоге тратишь на тесты времени больше, чем на тестируемый код.
Либо вертеть на хую фанатиков независимых тестов, и тестировать в качестве "интеграционных тестов", в определенном порядке.
Например, тебе нужно протестировать метод, который удаляет что-то из базы данных.
И чтобы это было юниттестом, ты не должен использовать уже написанный и оттестированный метод записи в бд.
Ты должен написать костыль записи тестового значения, который сфейлится при изменении структуры бд, или просто не будет работать так, как нужно - ведь никто не будет писать тест на тест.
В итоге то, что ты мог уместить в две строчки. используя готовый и оттестированный метод - будет раздуто в раздутую глючную хероту.
Но зато юнит-идеалисты будут довольны.
И опять же, при изменении структуры бд тебе всегда придется переписывать тесты вместе с методами.
Лучше и аккуратнее и менее ресурсозатратно - тестировать методы, работающие с бд, последовательно.
Создал, записал, вытащил, проверил, удалил.
То есть, общие глобальные переменные через него возможно делать?
Если у тебя есть модули с конструктором ты их сам создаешь и передаешь компоненту при его создании.
Пример из твоей же статьи:
[CODE]protected AppComponent buildComponent() {
return DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}[/CODE]
Да, applicationContext у вас один.
спасибо
Господа, кто-нибудь реально убирает ифы в своих адаптерах, и пишет подобный велосипед? Это же полный пиздец и код ради кода, нет?
Если, например, у вас адаптер работает в двух режимах отображения элементов, в зависимости от параметра X - придётся либо использовать ифы, либо устраивать велосипед из енамов енамов.
Пиздуй в гугл, все это разжевано донельзя.
Write once run anywhere больше касается архитектуры, радуйся что тебе не нужно задумываться "так это x86, тут sequential consitency, а вот тут для arm, нужно добавить memory fence иначе процессор может поменять инструкции"
Нагуглить что-то путнее про сами виджеты очень сложно, как примеры так и статьи, 90% поиска забито херней уровня android.widget.TextView.
Та нихуя там нету. Интересует мнение местных ананасов.
Разные разрешения и версии дроида есвенно. Второе фиксица библиотеками поддержки которые дают в старые версии функцианал новый. Но иногда бывают нюансы. В 5 дроиде появился материал дизигн, в 6 безопасность слегка поменяли. Версии ниже 4 почти не поддерживают.
У явы ток кор нормальный все потуги в гуи - фейл завязаный на платформе а не вм
Аноны, мне надо сделать тестовый компонент даггера, но в тестовой директории почему то не генерируется класс компонента, как быть?
Двачую. А лучше Unit of work. А еще лучше CQRS, но это хайлевел.
Забей хуй. Это для мамкиных GoF адептов, недавно прочитавших про хуяттерны и пытающихся внедрить их везде где можно и нельзя. Используй KISS и YAGNI.
Вот возьми и погугли это.
поставь прокси в настройках wifi + Fiddler
Если поставить запустить его через debag - там же будет url запроса в логах.
Ну к слову, сейчас начал пробовать сделать это как у них в сэмпле, вроде как не нужно менять свои классы, с роболектриксом то. Пока что правда запустить не удалось, но это вроде бы у меня косяки с SQL синтаксисом
Как тестить метод презентера с rxjava? Понял, что надо менять оба scheduler'a на immediate, но при нем тест падает в throw new RuntimeException(...) хотя это должно обработаться в subscriber'е в onError
https://sqlite.org/lang_createview.html
https://www.tutorialspoint.com/sqlite/sqlite_views.htm
https://sqlite.org/lang_createtrigger.html
https://www.tutorialspoint.com/sqlite/sqlite_triggers.htm
http://zametkinapolyah.ru/zametki-o-mysql/tema-14-view-v-sql-na-primere-bazy-dannyx-sqlite-create-drop-update.html
Когда использовал его - замечал что нужно использовать где-то модуль, чтобы он начал билдиться. То есть отдельно модуль без компонент и без инжектов иногда билдиться не хотел
UPD: аналогично - с компонентами, нужно их использовать где-то
беру данные из инета, если IOException беру из бд, если там пусто делаю вот так:
if (data.isEmpty())
throw new RuntimeException(throwable);
т.е. просто пробрасываю дальше, на девайсе всё работает как надо, а тест падает именно тут - throw new RuntimeException(throwable);
Нормальную ошибку кидай, а не рантайм, может помочь. Если к слову кидаешь внутри какой-то функции - то нужно в ней же и отлавливать, вроде как. То-ли баг, то-ли фича, черт его разберет
так если я его там отлавлю то в onError ничего не придет, а мне надо туда, это именно какая то хуйня с immediate шедулером, как мне кажется
попробуй observable конвертнуть в блокирующий - toBlocking()
А вообще вот эта хуйня с перекидыванеим это игрушка дьявола ежжи, надо оборачивать как все крутые посоны, возьми какую-нибудь имплементацию Try с гитхаба, или свою напиши по мотивам.
Что мешает заменить AFTER на BEFORE? Сначала срабатывает триггер, потом уже запрос.
так где его использовать? вот у меня в презентере есть метод - получить данные, проверить их и послать вью, или послать во вью ошибку, и я хочу проверить какие методы вью вызываются
Не слушай глупенького мальчика, не делай асинхронный код блокирующим
>То, что триггер должен срабатывать после INSERT-а, очевидно же, лол
>А есть ли какая-то возможность на время выполнения AFTER %OPERATION_NAME% SQLite-триггера отложить все запросы и выполнить после завершения запроса триггера ?
Вот совсем не очевидно, знаешь ли.
Давай лучше пример покажи, что ты хочешь сделать. Например "Хачю штоб после вставки значения в столб INTEGER Рост, если Рост меньше 180 - в столб BOOLEAN Карлан-унтерменш записывалось True."
Спасибо! Но мне интересно как это в контексте андроид приложения описывается. Есть какие-то примерчики?
Есть. Который ты напишешь и над которым поколдуешь сам.
Тут вроде как нет отличий в применении от других SQL запросов в андроиде. А на практике такие вещи лучше усваиваются, после череды выстрелов в ногу.
То есть, ты же любой пример по SQL в андроиде можешь взять, если не знаешь, как работать в нем с запросами. Зачем искать пример по каждому элементу запроса именно на андроиде, которых всегда будет недостаток, чем менее попсова нужда?
View и trigger это же уже из области проектирования структуры твоей бд под твои нужды, что от андроида зависит чуть менее, чем никак.
Хочу чтобы после операции добавления проверялось количество записей по предикату и если оно превышает определенный размер - шло рекурсивное удаление записей по другому предикату, до тех пор пока общее число не станет равным капу
CREATE TRIGGER audit_log AFTER INSERT
ON COMPANY
BEGIN
....INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now'));
END;
Этоя просто выдернул из примера для наглядности синтаксиса.
По сути то, что между BEGIN и END - это обычный такой подзапрос. То есть, он строится может без оглядки на внешний блок.
То есть, нужно вычленить из
>Хочу чтобы после операции добавления проверялось количество записей по предикату и если оно превышает определенный размер - шло рекурсивное удаление записей по другому предикату, до тех пор пока общее число не станет равным капу
"Хочу чтобы проверялось количество записей по предикату и если оно превышает определенный размер - шло рекурсивное удаление записей по другому предикату, до тех пор пока общее число не станет равным капу"
И на этом строить запрос, словно никакого триггера нет. Как бы ты строил без него. Потом обернуть синтаксисом тригера.
Ну так не нцать должно выйти. Я сейчас поэкспериментировал и уменя получилось что-то вроде такого.
CREATE TRIGGER IF NOT EXISTS myTrigger
AFTER INSERT ON MyTable
WHEN ((SELECT COUNT(*) FROM MyTable) > 5)
BEGIN
...DELETE FROM MyTable;
END;
В итоге после превышения 5 записей в бд - все удаляется. Но можно заменить на удаление с условием, например.
Но я хз, что делать, если даже после всех удалений строк по условию останется больше строк в итоге, чем нужно.
Разве что по id или timestamp самые старые чистить, например.
Мне аж интересно стало, по какому критерию будешь удалять записи, чтобы их гарантированно стало определенное число?
Мне никакой вариант без сортировки в голову не приходит.
Вот! Спасибо! Это то что я спрашивал как раз.
for each row с условием достаточно
причем с LIMIT 1 на случай одинаковых до мс штампиков
Я говорю плохо в цепочке выкидывать какие-то левые исключения. А если обернуть в монадку то ты в onNext возьмешь и обработаешь верный результат одним макаром, ожидаемые ошибки (файл не найден) другим, а фатальные ошибки третьим способом, onError предназначен для фатальных ошибок.
Поясните, не лучше ли для простых приложений
юзать веб-морду (на хтмл5+ксс) вместо
интрефейса на джаве?
Сервер на питоне.
Если тебе наплевать на качество, то да, лучше.
Не скажи, при плохой серверной части от приложения требуется заметная оптимизация по запросам и политике обновления данных
С Robolectric возможно тестировать recyclerview? Надо протестить scrollListener, че то он вообще не вызывается, хотя в адаптер recyclerview кладу данные и двигаю layoutmanager к концу
Сап, андроидач.
Есть одно клиент-серверное приложение. Веб-сервис на пхп, и два клиента - сайт и приложение. Авторизация происходит на клиентах через гугл.
ВНИМАНИЕ ВОПРОС
Сейчас пилю платную версию приложения, в которой будут доступны некоторые фичи. Необходимо на веб-сервисе запилить проверку что пользователь купил приложение. Api для этого не нашёл.
Какие варианты?
Проверять по логину? Раз все равно авторизация.
Хотя, это хуйня как по мне, потому что
>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.
В итоге твое приложение декомпилируют на следующий день, и каждый васян будет дрочить твой сервер нахаляву. А если там еще сторонние платные api используются при этом, типа гуглопереводчика - то это ж пиздец, доверять такое гугломартыханам ебучим.
Плохо можно написать на любом язык/фреймворка.
Это же типа для подписи. Приложение посылает запрос гуглу чекнуть привелегии текущего пользователя. Гугл присылает ответ. Без подписей какой нибудь васян может спокойно подменить ответ гугла своим (в том числе вообще и не пропустить запрос к гуглу). А так ответ подписан дохуя сикретным ключом гугла - и васян его подменить уже не может. А ключ в исходниках это открытый ключ - то что его достанут нихуя не даст. Если конечно у васяна не завалялся квантовый компьютер.
Тот же лаки патчер просто подделывает результат проверки.
А что мешает провести тривиальный реверсинжиниринг и тупо убрать эту проверку?
закинь код на pastebin, гляну
В этих самых скриншотах только постеры фильмов и фотографии актеров, получается, дело в них.
При этом тысячи приложений используют их подобным образом, и они явно не получали для этого никаких дополнительный разрешений. Как выйти из ситуации?
То, что дозволено барину, не дозволено холопу. Смирись.
где-то читал, что при оверрайдинге методов всегда надо вызывать super.*
Хочу в коде оверрайднуть onBackPressed();
но если я вызываю super.onBackPressed() то весь последующий код не работает, если я его не вызываю то все работает как надо.
Вопрос: есть ли в моем случае подводные камни?
Уверен, что не вызывается? Добавь после вызова super строчку с логом. Например
Log.d("MAAAM LOGI!!", "NU RABOTAET JE!")
Потом запусти приложение через debug и ищи строчку.
> где-то читал, что при оверрайдинге методов всегда надо вызывать super.*
Тебя наебали. Зависит от метода. В случае onBackPressed(); от конретной ситуации зависит.
Если я правильно понял сорцы - активити уничтожается при вызове onBackPressed(). То есть, ты вызываешь дефолтную имплементацию, а активити сдыхает раньше, чем ты пытаешься что-то сделать.
Что за бред? Подыхает активити или нет (я уверен, в родительском коде просто вызывается finish или что-то похожее происходит), код не может не исполняться после вызова метода родителя, если не бросается какое-то исключение.
Посиди с отладчиком или логгером, разберись, почему твой код не работает, а не делай такие безумные выводы.
Но чтобы послать intent через LocalBroadcastManager, нужна передать ему контекст.
Что там происходит, когда активити убито? Контекст чего передается и какой вообще?
Можно скопировать дефолтную реализацию, и вставить то что ты хочешь перед finishAfterTransition();
Дефолтную посмотри в сорцах выше.
Благодарю.
Хотя, можно и сначала слать intent, потом вызывать super. Это же не конструтор, где это должна быть обязательно первая линия.
Нужен отдельный класс для хранения. Или вообще контент провайдер. На и на память смотреть нужно. Если данные легко получить заново, то лучше их не хранить (если они памяти много занимают). Или там настроить освобождение памяти в onLowMemory. Но в общем идея хорошая.
Все бы ничего, но виджет не только отображает данные, но и позволяет минимум манипуляций с ними. Пока он есть, сабкласс application может быть прибит? Я читал, что они находятся в одном процессе же.
А то выйдет, что виджет, допустим, текст отображает, а самой переменной нигде уже нет, application прибит.
Ну, грубо говоря, например виджет показывает число 5, и при нажатии на кнопку число должно возводиться в квадрат.
Вот если бы во время существования виджета у него был свой свой экземпляр класса в памяти, в котором можно было это число хранить - проблемы бы не было, наверное, но его нет, и за обновление отвечает AppWidgetProvider, который долго не живет.
Как вот сохранить это самое 5, чтобы передать его службе или activity при нажатии где-то на виджете? В файлике каждый раз при обновлении виджета записывать значение, может?
Либо я вообще зря себе мозг ябу и при смерти application виджет тоже схопнется?
Просто я наткнулся вот на это
http://www.developerphil.com/dont-store-data-in-the-application-object/
И если это правда, то там нельзя хранить что-то помимо констант, выходит, потому что в середине работы все кроме них может пропасть.
Хм, можно же поля в application задавать через setter, а в нем дублировать в файл.
Если application и перезапустится - то данные восстановятся через указание в onCreate() ручками. Так что не так уж тщетно бытие, видимо.
К тому же виджет рендерится отдельно хостом, не? При смерти application по-умолчанию не должны же с ним какие-то изменения происходить, не?
Контекст активити. В момент закрытия, активити жива. И остается жива долгое время, как минимум до окончания вызова onDestroy.
Далее уже точно не знаю, надёжнее всего считать, что активити не существует. Хотя наверняка можно будет ещё контекстом пользоваться.
> И все же, если виджеты и application работают в одном процессе - почему мы используем remote views и pending intent? Сдается мне, что тут что-то не так.
Не работаем в одном процессе. В твоём процессе есть только бродкаст ресивер, который получает события для манипуляции с виджетом.
Хм. Так я и думал, что бы там на stackoverflow не писали.
В общем, контент виджета и активити никак не выйдет гарантированно держать синхронизированным без файла, выходит.
Выйдет. Просто надо виджет прямо в активити обновлять, когда нужно. Ты волен это делать где угодно и когда угодно.
Так ли критично, чтобы пользователь при нажатии попал именно в activity с инфой из уведомления?
Могут ли подорваться до 1чек чьи-то жопы, если, допустим, уведомление висит нетронутым, пользователь получает все новую и новую инфу в самом приложении, потом жмет на уведомление и... Попадает на то же самое место, на котором остановился, а не на то, которое в уведомлении?
Является ли обратное удобной фичей, или же пустым пердолевом для аутистов?
Не, тогда он станет полностью бессмысленным. У него должна быть некоторая самостоятельность, а не просто плашка с отображением.
Зависит от задач которые ты ставишь перед интерфейсом. Если, к примеру, ты хочешь чтобы он был "удобным" то одна из целей - минимизировать количество действий пользователя. Тоесть тебе нужно прикинуть возможные сценарии действий пользователя которые он захочет совершить после получения уведомлений и при нажатии пользователь должен попадать на активити которая позволит ему совершать минимум действий (в среднем). Если, к примеру, ты хочешь максимизировать показ рекламы - то после нажатия пользователь должен попадать на рекламу. Ну и так далее.
Вот от рекламы точно будут 1-чки
Вопрос желания извращаться же, как по мне, так можно на простых проектах использовать что нравится (хоть хаскелль, ей богу), а вот большие (больше 6-7 модулей, наверное, и тысяч за 150 строк кода в совокупности без тестов) уже только на java. Ибо на данный момент она банально менее багована и по ней больше доков + больше фичь есть (тот же Unsafe, ога)
В обсчем, как послать intent в AppWidgetProvider из activity?
Вопрос в том что лучше сделать. Можно и просто что-то на отъебись, можно попробовать интересное.
Думал вот сделать показ анекдотов категории б, но может есть еще какие интересные идеи?
Bump
У меня есть сервис(intent), который в фоне синхронизирует локальную бд с апи. И по окончанию этого процесса мне из сервиса нужно дернуть метод фрагмента, который обновит ui. Все что гуглится это какие-то костыли или непонятно что и я уже подумываю не заменить ли сервис на лоадер. Как-то по нормальному это сделать можно?
Очень оперативный анон, я в доках прочитал, что "Привязанная служба обычно работает, пока другой компонент приложения привязан к ней"
а мне вроде как надо чтобы сервис отработал до конца в любом случае. Или этот как-то можно обойти?
Бросай локальный бродкаст
Бинд может и к уже работающему сервису подключиться, в этом случае анбинд его не остановит. Разберись с сервисами.
В примере из codepath .OnSubscribe горит красным. ЧЯДНТ
Сап, делаю простой текстовый квестик на ведройдике. Есть некий общий лейаут (информация об инвентаре, ранах, сломанных костях, порванных артериях етц) переход на который должен быть доступен с любой локации, с возможностью после просмотра инфы с этого лейаута вернуться на тот, с которого я совершал переход. Сначала хотел через setcontentview организовать, но потом подумалось, что просто натянуть новый лейаут сверху, а при выходе удолить будет проще. Только вот чем вот можно сверху его надеть?
гугли backstack.
Джентельменский набор:
Todo App, синкающийся с календарем
Трекинг расходов/доходов, с синхронизацией через гугл драйв например
Погодное приложение
byte[], по крайней мере это то что можно достать их курсора, а так-то тебе наверное битмапка нужна. Но идея не очень.
С одной стороны, intent явный же, с другой - он летает между приложениями, он совсем не локальный.
Можно ли его спиздить и узнать кусочек внутренней реализации?
Не советую хранить картинки в бд. Но самое главное, не храни их в контент провайдере.
Вопрос снят, хуй знает в чем проблема, переделал цепочку, теперь бродкаст шлется, но непонятно почему если до onNext доходит в обоих случаях, бродкаст шлется только в одном, мда.
Мне кажется, проблема не с куками а с самим запросом, потому что возвращается не страница "ошибка логина" или "логин успешен", а главная. Видимо, с передачей параметров в POST загвоздка.
Но за ссылку спасибо, посмотрю.
По моему опыту спиннер не самым очевидным способом готовится. Чем тебе не подходит существующее апи?
https://geekbrains.ru/professions/mobile_developer
звучит красиво и цена неплохая, каково обоснованное мнение Анона?
если есть опыт в программировании то не стоит, сам во всем разберешься. Ежили нет, то зависит от упорства, желания или денег. Если есть первые 2 качества, то таки сам до всего дойдешь не потратив ни копейки, но если деньги не проблема - пройди курсы, промотивируй себя тем что заплатил
Никогда не связывайтесь с этой конторами и прочими курсами от Васяна.
Годные курсы могут быть лишь у хороших университетов (курсера, едх, степик) и у технологических компаниях уровня Яндекса, JetBrains.
И всегда они бесплатные.
На курсах от Васяна вы будете слушать пересказ официальный документации и решать хеллоуворды из книг серии "ххх for doomies", получите меньше навыков и опыта, чем если бы потратили неделю на самообразование, и сертификат, которым можете подтереться.
юзаю андроид студию
так получчилось, что нужно использовать именно встроенный эмуль. пишет:
waiting to target device to come online
хотя эмуль запущенный, летает, запускается тоже быстро, анончик, как лечить?
Поясни, у тебя девайс запускается и нормально функционирует, но студия не видит этого и ждет, или же эмаль висит в загрузке ?
Хватит мозгов и выдержки - сделай свой кастом на базе ReyclerView, не хватит - юзай офф доки по спиннеру
Можно, методом тыка все можно
startActivityForResult ? Ну, если есть какие-то манипуляции с инвентарем, то вполне уместно выглядит
Можно через IPC callback передавать, а сервис сделать started и вручную убивать по окончанию загрузки
Если можешь реализовать без них, то так и делай. Но как ты будешь например отправлять или получать данные в фоне (с закрытым приложением) без сервисов? никак
А именно, требовалось создать приложение, которое берет данные с сайта вроде weather.com и отображает их.
У кого-нибудь сохранилась ссылка на это тестовое задание?
Где можно найти актуальное тестовое задание Российских компаний?
Можно я тебя поспрашиваю?
А какой лвл, если не секрет? Живешь в ДС?
Как вкатывался, что именно делал для вкатывания? Смотрели ли твой гитхаб?
20 лвл, живу в украине, львов.
Вакансий на трейнии мало, ходил только на одно собеседование, обычно всем нужны джуны с 1+ годом опыта. Потом один знакомый написал что ему нужны андроид пацаны и дал контакты чувака, который меня на работу и взял. Этот чувак собирается свою фирму открывать, спрашивал не сильно, в основном какую-то глобальную теорию типа: "как тянул инфу с сервера, как работают джсон обьекты, генерализацию джава", потом я показал свой курсач, там были sqlite и ретрофит, потом кинул гитхаб, на который по его просьбе закинул этот курсач и лабы, которые писал на андроиде в универе, штук 5-6 их было.
Пока что работаю дома, пилим апки для рекламы фирмы.
>что именно делал для вкатывания
ну вот курсач и лабы помогли, так то они говорили, что хотели тестовое задание дать, но т.к. у меня уже было свое говно, то не дали.
Понятно. Львов охуенный город, кстати.
загрузился, но андроидстудио ждет пока загрузится. пишет типо вейт фо онлайн
Есть цикл, который ждет пока размеры не станут нормальными, и пробует их раз в 10мс. Он ждет вечно
Почему такая херня?
> Есть цикл, который ждет пока размеры не станут нормальными, и пробует их раз в 10мс.
Пиздец у тебя говнокод.
> ЧЯДНТ
Используешь rx2
>>930869
> Есть цикл, который ждет пока размеры не станут нормальными
view.post { view в лэйауте и имеет размер }
Не говоря уже о том, что ты и сам можешь вызвать view.measure
Прояснилось за rx2
Мне тут на днях прислали задание на трейнии, надо сделать десктопоне говно, которое режет фотку на пазлы, сейвит N фоток в папке, а потом другой алгоритм это все собирает. Чтобы первый и второй алгоритмы не были связаны и ничего друг о друге не знали.
> тянет на середнячкового миддла, но на джуна.
Шутишь что ли? На джуна в самый раз. Мне подобные давали как тестовые задания. Если ты нормально андроид знаешь, а именно основы и пару либ, то ты это за 2-4 дня сделаешь.
Хуевые макеты, не признаю ничего кроме sketch.
Берешь фотошоп дроченый, открываешь эту хуйню и смотришь размеры. Дизайнер же по гайдам верстал? Если да, то почти без проблем можешь считать что 1px на макете = 1dp.
Один код на двух платформах, вездесущий Javascript,еще один конкурент нативной Jave.
Нам пиздец?
Зачем бизнесу тратиться на java и swift макак, если можно купить одну javascript макаку? Результат будет один и тот же практически.
React native выйдет из преальфы, релиз за релизом.
Киллер фичи.
Не убьет нативные языки, так потеснит
Ну охуеть теперь, швабодка жму пинус? Для винды есть пару программ позволящию просматривать макеты в скетче + zeplin.
В том то и дело, что ни одной программы, которая нормально показывает его файлы нет. Так что дизайнер должен юзать общепринятый в отрасли psd или идти нахуй.
Вернее, он должен уметь не только предоставить макет, но и нарезать в соответствии с разными плотностями экрана, состояниями и так далее.
> Так что дизайнер должен юзать общепринятый в отрасли psd
А ты psd будешь в гимпе открывать, швабодный?
>>931270
На глазок. А цвета пипеткой замеряю.
Нормальный дизайнер сам тебе все нарежет, существует куча плагинов экспортирующих асеты под ведро/гейось/уеб/десктоп. Все это закинет в папочку и пришлет тебе вместе с макетом.
Zeplin нормально показывает, даже позволяет доставать асеты. Но все это только если дизайнер не мудак и все правильно разметил.
Все что нахожу - одноклеточное говно, работающее на одной последовательности.
А где есть матрицы - они сливаются в один лист и хуй знает как вообще потом определять строки\столбцы при нажатии.
В других графических фреймворках почему-то grid'ы с православными строками\столбцами, и только в ебаном ведре хуярят через сплошной лист.
Что у тебя конкретно не получается? btw GridView устарел. Ты же знаешь что матрицы тоже обычно хранятся линейно.
А что есть на замену ему?
Допустим, есть матрица
[[object1, object2, object3, object4, object5]
[object6, object7, object8, object9, object10]
[object11, object12, object13, object14, object15]]
Заполнить сетку-то их вьюхами просто, слив матрицу в одномерный массив. Но как при нажатии вычислить позицию в сетке, если в адаптере используется только одно число position?
Мне это нужно, чтобы оперировать самой матрицей. Например, поменять несколько объектов местами. Передвинуть выше, например. Я же не могу сделать это в одномерном массиве.
>>932277
Сделай класс матрицы который инкапсулирует доступы/смены элементов. Типа такого: http://pastebin.com/MecHx61p
Вообще сейчас норм использовать RecyclerView, и что бы получить грид - GridLayoutManager
А забыл, там же в адаптере только одна позиция, ну можно добавить метод:
public final T getRaw(int position) {
____return data[position];
}
Та сама логика у меня уже готова отдельно. Я с представлением больше мучаюсь, чем с ней. На каком-нибудь GTK или QT уже сделал бы и забыл.
Задаешь лэйаут менджеру ширину матрицы как спан каунт и все. А дальше тупо по позиции дергаешь элементы, она тупо слева на право, сверху вниз.
Я андроид еще толком даже не нюхал, но судя по описанию - не вижу в задачке ничего сверхъестественного.
Нет. Они лежат в только читаемой области, с рутом можно делать все что хочешь, плохая идея.
Я не пойму почему вкатывальщикам советуют андроид, мол легче чем в энтерпрайз? При том что тут надо сначала знать джаву нормально, что бы не обсираться, а потом еще и знать андроид фреймворк со всеми его правилами.
Нахуй тебе свой? Всё, что ты описал реализается стандартными средствами. К тому же, это не функции ViewPager'а, а его адаптера.
Если всё же нужен свой, то открывай исходники и смотри, делай похоже.
Например, что-то над фоном.
Я знаю, что можно сделать один parent'ом, но как быть, если они оба child другого parenta?
Как внутри parent'a регулируется, какой виджет перекрывает другой?
Отрисовывается все по очереди заданной индексом в родителе. Меньше - раньше.
Я понимаю, что можно другим способом программно задать, но все же.
Значит я не понимаю как это сделать в адаптере,
Начальное состояние вьюпейжера мне нужно такое даны три фрагмента, активити открывается на втором фрагменте. Далее после свайпа, например вправо, текущий фрагмент становится третий, теперь мы должны удалить первый фрагмент и добавить 4й, так чтобы количество фрагментов осталось 3 и по прежднему текущий фрагмент был вторым.
Мне нужно поставить обработчик на onchangepage метод onpagechaged и в нем пересоздать адаптер с новым содержимым?
Или нужно как то в адаптере перезаписать метод initializeItem и в нем удалять ненужный фрейм и добавлять новый? Или новый список с фреймами пересоздавать на это событие и выставлять текущую снова вторую.
Вообщем не понимаю как сделать так чтобы оставалась позиция страницы всегда вторая.
Посоны, кто-нибудь проходил курс Java rush? Стоит он затраченного времени? Потому что я вот на втором уровне и меня как-то настораживают многократно повторяющиеся задачи типа "выведи петросянские смехуечки на экран".
Тебе в java-тред.
Годная, но сырая.
Пытаюсь взять размер экрана, взять размер отступов (перевести их в пиксели), отнять отступ * 2 от размера экрана - и чет нихуя не сходится в итоге. Куска в пол миллиметра не хватает.
У обоих стоит match_parent.
Более менее сходится, если отступы умножить на 5, но это пиздец какая-то магия.
>>932993
А чем тебе getWidth не угодил? Ну кроме того что его имеет смысл брать только после полного лэйаута и возвращает он в пикселях.
Ну потому что ничего еще не вымерено. Засунь его в колбек на глоабльный лейаут, так будет правильней.
Фокус в том, что мне нужно в GridView динамически подгонять размер ячеек под размер экрана.
Если я засуну определение ширины в Runnable, это же все равно случится после того, как адаптер распихает все в GridView, не? Мне вот надо как-то в момент впихивания первого элемента успеть получить значение.
Ммм, а если адаптер регистрировать как раз в Runnable, который впихнуть в post?
На 16 уровне сейчас. Довольно годно, если вообще 0 в программировании. Задрочка кода там повсеместно, но зато действенно. Для того чтоб вкатится в андройд достаточно 10 бесплатных уровней. Так что можешь не покупать подписку.
Почему бы тебе не посчитать размер до прицепливания адаптера? Получаешь размер доступной области для своего грида, вычитаешь место для отступов между объектами, или как ты там себе думаешь, и потом задаешь эти параметры адаптеру, который будет знать какого размера вьюхи делать.
Есть другой способ, не требующий специфических действий извне. Берешь percent relative/frame layout, используешь его как корень вьюхи итема, ширину итемы всегда будут получать одинаковую, а ты просто задаешь нужный тебе аспект рэтио.
ну ты же хочешь положить деньги кому-то в карман за то что можно получить бесплатно? Чем я хуже, со мной хоть времени терять не будешь на смехуечки.
А у грида тоже match_parent. И у всех его родителей.
Я пытался считать через
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
там высчитывал параметры ячейки и передавал адаптеру. Вот только размер грида не совпадал с тем, который можно получить потом в getWidth. Хотя, считал по формуле.
Да и я уже наконец-то сделал, что нужно через задание адаптера в post.
>Я уже пару лет пишу под android, но есть определенные пробелы в знаниях по Java
Как же ты это пишешь? Как чучело из изумрудного города?
Я и не задавал.
Я делал так.
Допустим, экран 1000 пикселей. По бокам от gridView по отступу в 10dp. Перевожу их по формуле в пиксели, получается допустим 100 пикселей на отступ.
1000 - 100*2 = 800. Но атятя, не сходится почему-то.
Активити 1 передает через интент значение в 2, 2 просто запускает активити 3, 3 делает запись в бд и возвращает на 1 активити, как сделать так, чтобы с 3 вернуться сразу на 1, не открывая 2?
Потому что ты делаешь черти что, без обид.
>>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];
}
я все верно понял?
Нет, там список, скорее всего RecyclerView. ScrollView сожрал бы кучу памяти под вьюшки которых нихуя не видно.
Ты должен читать поля в том же порядке в котором записывал, в newArray ты просто должен создать массив своего типа с данным размером, количество полей там не при чем. Это сделано для того что бы избежать рефлексии для создания массивов.
Анон, спасай! Нужен код простой программки которая выведет информацию о RAM и HDD памяти телефона.
Если это как-то можно сделать стоковыми средствами Андроид то вообще заебись, но пока ничего не нашел.
Задача у меня: сохранить большой объект (лабиринт, который может генериться секунд 40, если большие размеры указать) и не генерить его заново после поворота. Делал через static - падало с размерами 23x23. Сделал с повторной генерацией после поворота - начало падать на 40x40.
Не знаю чего еще сказать
подскажите, кто знает
Проверь на всякую хуйню типа переполнения стека или памяти. Что такое "размеры 23x23"?
Внизу где-то, android monitor смотреть. Алгоритм генерации чей? 40 секунд на лабиринт в 500 клеток это не очень.
не, долго он генерит большие, а такой за секунду.
Алгоритм моего друга-заказчика
http://stackoverflow.com/questions/7374246/how-to-get-total-ram-size-of-a-device
http://stackoverflow.com/questions/11410514/getting-storage-information-in-android
щенок ебаный
Код по ссылкам может не работать или быть с багами или просто ты не догадаешься его правильно испльзовать.
головой кароч подумай чутка. Если думать не хочешь, открывайанус кошелек.
И почем цена скрипта обращающегося к API дроида?
Смотри, как человек, обучающий других людей этому делу, могу сказать следующее: лучше начни с "Философии 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-ом, научись в тестирование.
Дальше, если дойдешь до этого момента, думаю, сам уже поймешь что делать, но если что - обращайся!
Смотри, как человек, обучающий других людей этому делу, могу сказать следующее: лучше начни с "Философии 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-ом, научись в тестирование.
Дальше, если дойдешь до этого момента, думаю, сам уже поймешь что делать, но если что - обращайся!
Спасибо, милчеловек!
Вообще, "Философию Java" я освоил еще полгода назад, но до сих пор иногда почитываю. Можно ли с учетом того, что мне не придется ее заново перечитывать и что я уже немного помацал SQLite осилитт все это до начала (конца) лета?
У меня ушло чуть меньше двух лет, чтобы выйти на уровень "опишите стек технологий, почитаю доки если че непонятно и скажу вам срок выполнения". Но если у тебя хорошая подготовка (ладно, будем честны, если у тебя есть хоть какая-то подготовка) то до этапа "фреймворки" дойти должен успеть
Даб к слову, я придерживаюсь мнения большинства, философию нужно периодически (раз в три-четыре месяца) перечитывать. Во-первых там треть вопросов с собесов покрывается, во-вторых, ИМХО, приятно читается.
Хороший совет, на самом деле.
Главное, с голым андроидом не переусердствовать, а то он может всё желание отбить.
Проверял у себя и на примере (в последнем заменил только OnLongClickListener на OnClickListener).
>OnClickListener
Причем, нажатие обрабатывается 100%, я проверял в логах.
А вот в OnDragListener эвент прилетает только при повторном.
Как-то связано с тем, что OnClick OnClickListener ничего не возвращает, а OnLongClickListener возвращает boolean?
OpenCV самый оптимальный вариант на ведре. Вроде ещё tensor Flow должен прикручиваться, но не пробовал
Что есть сегодян есть для обработки мелодий в вибрации для видра?
Ну просто я ещё под iOS разрабатываю.
Пацаны помогите разобраться с viewpagerом и adapterами всякими, чот нимогу раскурить. Смотрел в оф доках как работать с ним и фрагментами. Смотрел на стартдроиде статью. Я чет не догоняю никак как это все утсроено. Паможите!!!
Можно вызвать в нужном тебе месте метод
notifyDataSetChanged(), который уведомит адаптер, что нужно отобразить измененное содержимое.
Все манипуляции производить с данными в последовательности, которую передал адаптеру, потом вызывай notifyDataSetChanged().
Это можно прям из активити делать.
А как изменять индексы страниц у вьюпейжера? можно как то отказаться вообще от позиций вьюх? типа 1 страница поумолчанию только. Но когда свайп случается билдится вторая или предыдущая.
Красные слишком выделяются на фоне всего, отвлекают и вообще глаза разъезжаются, я так косоглазым стану.
Отказываться от белой темы и стирания шишки на сотни строк в день не хочу.
Settings - Editor - Colors&Fonts - General - Code - Line Number.
Если я .NET помидор с 6летним стажем, могу ли я не читать философию жабы? Глянул на синтаксис - от шарпа существенно не отличается.
Я так понимаю, что это книга для разного рода вкатывальщиков, которые не имели дело с чистым ООП.
А чо есть грязный ооп? Или какой то другой ооп который типа вкатывальщики учат, а 6летние помидоры знают уже какойто другой ооп?
Ну например тот же C++, который является от части структурным языком в подмножестве C. Т.е. существование функций, которые живут вне класса.
Так же можно упомянуть про всевозможный сахар аля C#, который позволяет обходить ограничения, которые могут возникнуть в Java, решаемые там с помощью использования паттернов те же ивенты и делегаты.
Мультипарадигменный ЯП, который лишь предоставляет ООП как возможную парадигму написания JavaScript
Java - сферический ООП в вакууме. Я считаю, что если ты помидор, знающий паттерны хуяттерны, то читать книжку, которая представляет их как часть философии - нахуй ненужно.
При чем тут это? Я имел в виду возможность написания функций вне класса в принципе.
Ладно это все фигня лучше поясни как в андроиде из хмл описания виджетов объекты создаются, и как с тем же вьюпейжером разобраться.
> из хмл описания виджетов объекты создаются
Если тебе нужно описание внутреннего устройства, то я тут тебе не помошник сам вкатываюсь. иначе не спрашивал бы про необходимость изучения жабы по философии. А так из того, что знаю - LayoutInflater все делает.
> и как с тем же вьюпейжером разобраться
в смысле, как сбрасывать вьюпажер при поворотах экрана? Честно говоря, сам не знаю. Чому в гугле не спросишь?
Не, я хочу бесконечный вьюпейжер сделать, где типа у него только три фрагмента. Когда свайпаешь типа все красиво свайпаецо на левый или правый фрагмент, но после окончания свайпа я хочу перегенерить позиции вьюпейжера, чоб было как до использования свайпа. Типа в текущей памяти три фрагмента, текущий, левый и правый они не видны. При свайпе перелистывается например на правый фрагмент. Дальше вот хуй пойми где код писать перестроения всего этого дела. В пэйжер адаптере или в пейжер фрагменте или допиливать вьюпэйжер.
А про инфлейтор хмм что он вообще делает, можешь если не сложно на пальцах как дауну пояснить.
Т.е. тебе нужен по сути циклический замкнутый переход?
Первая ссылка в гугле
http://stackoverflow.com/questions/12471597/how-can-i-make-viewpager-loop
LayoutInflater.from(%context%).inflate(R.layout.%layout_name%) просто создает View по айдишнику лэйаута. Потом из этой View ты можешь через findViewById доставить всякие конторы, которые ты в этом лэйауте определил. В принципе нихуя сложного.
на кожаной флейти поди поиграй, дудочник
Мм, да я это видел, но а б с страницы типа будут по кругу скролится, но типа надо чтоб данные то менялись в них. Для этого завести какую нибудь глобальную переменную, которая взависимости от свайпа +-1 делает и уже от этого в пэйжере контент выводить?
А еще вот пэйжадаптер, он логически отвечает за информацию подаваемую в фрагмент? Тоесть пэйж адаптер знает что третья страница и достает инфу из третьей строки в бд и передает в фрагмент, где тот уже запихивает переданые поля из адаптера в свой фрагментный лэйаут.
Если грубо говоря это похоже на лэйзи лоад чтото, подгружать новые фрагменты, но удалять старые.
Если юзать FragmentPagerAdapter, то так и должно работать, если я не ошибаюсь.
Нашел убогий SSH клиент под свободной лицензии и тот даже ключ добавить не дает.
Как поставить какое-то окружение на эту недосистему вообще незнаю. Рута нет. Получить через уязвивость в кит-кат незнаю как.
А ты знаешь, как получить рута? Без всяких китайских троянов. Незнаешь? Так тоже иди нахуй.
Вы блять хоть чуть-чуть в гугл умеете?
https://developer.android.com/training/camera/photobasics.html
Хуйня это ты, у меня все фотки берутся. Ты же даже не можешь сказать что у тебя не работает, даже никакого кода небось нет.
Да я там просто обосрался, впрочем ничего нового. Не полностью старый код откатил и камера лочилась перед отсылкой интента.
Ебанашка пытается выебнуться тем, что удачно копипастит готовые примеры.
Да ты же утрешься при первой же нестандартной задаче, которую не реализовать стандартными средствами без киянки и мата.
Надеюсь, тогда найдется ЧСВшный хуесос, который встанет и ололокая пустит тебе тугую струю в ебало.
Из-за такого говна вот и не хочется куда-то идти, кроме как на stackoverflow.
Когда я задаю тут вопрос, я не ожидаю на него другого ответа, понизь свои ожидания.
Какие-нибудь логи есть?
https://forums.xamarin.com/discussion/64088/android-emulator-opens-but-project-does-not-deploy-and-start
Как вариант можно попробовать adb.exe прибить, но это уже из области танцев с бубном.
Ясно, латентный мазохист ожидает, что другие оценят его попытки при чинить добро.
Насколько нужно быть ебанутым, чтобы бомбануть от нубасного вопроса, а потом (!) полезть искать ссылку для ответа. А потом еще и выебываться.
Блядь, даже вот не думал, что pr собрал такой гной из профессии. Неудивительно, что здесь так тихо. Безрукие агрессивные ебанашки-копипастеры разгоняют всех адекватов.
Что тебя конкретно интересует? Не встречал какого-то общего гайда, соскейлить/вырезать/записать это есть.
Вот пара толковых:
Крутой блюр - https://habrahabr.ru/post/215077/
Подрезки/масочки - https://habrahabr.ru/company/badoo/blog/310618/
Короче надо гуглить определенную тему. Опять же многое можно подчерпнуть из исходников glide/picasso, но там больше про менеджмент.
public class Example {
public static Example get(Context context){
}}
Это именованный конструктор или как?
Example слева от get - это возвращаемый тип. То есть это статический метод, который возвращает экземпляр этого класса.
Метод класса, грубо говоря, а не экземпляра.
метод get, объявленный в классе Example, возвращает экземпляр Example? (Example = Example)
Ну да, может там в методе какая-то хитрожопая инициализация, и дополнительная обработка (что и отличает от простого создания через конструктор) которую не хотят доверять тебе?
Все так, анон. Спасибо тебе!
Уот ета пичооот, еще небось и рута у тебя нет, маня?
Во-первых она не должна быть преждевременной. А во-вторых - https://www.youtube.com/watch?v=qk5F6Bxqhr4&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE
Ну и вообще надо думать и все будет в норме. Обычных джавовских навыков хватит.
В принципе оно сейчас это делает, но Bluetooth создается объектом в MainActivity c соответствующими последствиями. А мне нужно, чтобы соединение не терялось при переходе из одной Activity в другую (и полученные данные обрабатывались по-разному соответственно).
Как грамотно сделать подобное? Что почитать про Bluetooth? Я так понял, нужно мутить Service, в правильном направлении копаю?
Вариант для обрыганов - синглтон/инстанс блютуса в апликешоне.
Вариант для норм пацанов - блютус в сервисе. Возникает два варианта - сервис который ты сам стартуешь и который стопается тобой же, из форграунд нотифкации или аллаха. Вариант второй - байндишся при старте активти и анбайдишся в стопе, если юзер переходит на следующее активити товего приложения то сервис не помрет, в обоих вариантах можно организовать общение через байндер и будет ништяк, ну или бродкастами хуярить.
>что почитать
Доку для начала. Тем более если приложуха уже умеет все что надо из активти то и читать особо ничего не надо, кроме существующего кода.
Уровень знаний обитателей 4пда недостаточен, что бы ответить на мой вопрос. Похоже здесь тоже.
Быдло
Сервисы хранятся в дебрях активист менагера, и когда одна активитя стопается и анбайдится сервис подождет старта следующей, а там и байнд есть, ничего не пропадет, проверено музыкальным плеером и вебртисишным аудио/видео чатом. Еще можно форграундную нотификации бахнуть.
Вы красивые слова говорите, еще б я понимал чего-то. Завтра буду переводить ваши речи.
На хуеми, который больше одной залоченой приложухи не держит - норм, на мейзу тоже. А если китайфон не тянет то пусть нахуй идет. Андроид нигде гарантии не дает что все будет круто, но форграундную сервис это как форграундную активитя и грохать ее будут в самом крайнем случае.
Я скачал Git, запилил аккаунт на гитхабе. Делают пуш из Android Studio - коммит отображается как совершенный с аккаунта Git, а не гитхаба. Как исправить? Не вручную же кидать файлы...
Иногда(весьма часто) не пробрасываются ошибки и ты сидишь, кучу времени пытаешься догадаться, что наебнулось. В гуглах ничего вразумительного не нашел, с другими телефонами таких проблем нет. На нём стоит Android 6. Были у кого-нибудь похожие проблемы?
А если и получится, то одно неверное движение и все сбрасывается.
Он не особо стабилен ведь ещё. У меня вроде нормально работает, без тормозов. Отправь багрепорт, может починят.
Лол. Какой анальный зонд? Может ты и против гугл аналитики? Пиздос какие шизики бывают.
Червь пидор, в архивах и папачках храни типа Laba1_21072006, Laba1_210720061701, Laba1_21072006_1vasya_edit.rar
А про гит забудь не твое это не лезь туда. Через пару лет когда окончишь школу можеш попробовать но только под надзором взрослых
Крашлитикс то да, но пользоваться ей для отладки куда запарней, чем созданными, для этого, инструментами, лол.
>Нормально
Нет. На клиенте не должно быть ничего "секретного". Может ты и сертификат в assets пихаешь? Ключи апи (гугл хуялитика, вк хуяпи и тд не секретные данные если чо)
Ну, а где тогда хранить то то, что ДОЛЖНО быть на клиенте и ДОЛЖНО быть секретным ?
Конкретней, что ты считаешь секретным? Есть множество замечательных статей, которые поясняют, что как бы ты не изъебывался за сравнительно не долгое время все на твоем клиенте вынюхают и реверснут.
http://stackoverflow.com/questions/14570989/best-practice-for-storing-private-api-keys-in-android
Что у тебя за компьютер, лол?
Сижу с fx8300 с 16 гб на борту - работает все нормально.
Вообще, считаю андроидстудио максимум легковестным после многолетнего опыта в VisualStudio.
А сикретный ключ для несиметрических алгоритмов шифрования где должен храниться?
Прости, но с таким же успехом можно подружить с сервером со своего устройства, и оттуда вытащить те же ключи. Разницы будет - 0. А вот как ты после DexGuard-а что-то с клиента, подверженное, вдобавок, дополнительной обфускации, вытащишь 0 мне стало интересно уже
Может чтобы разгрузить твой клиент от ненужной хуйни ? Мне собственно интересно, как ты хранишь ключи апишек, например, или ключи от базы данных с пользовательскими данными (и не пизди, что ты не делал ни одного приложения с ними, ога), ну или токены, что самое банальное ?
API keys не защитить никак. Как бы ты их не прятал, сетевые запросы легко перехватить и прочитать.
БД шифровать тоже особого смысла нет. За это отвечает (и должна отвечать) ОС.
Если у тебя OAuth, не какая-то самописная хуйня, то токены тоже нет смысла прятать.
Другой анон
Почему с oauth не надо прятать токены?
Все замечательно до тех пор, пока вьюшка не разблокируется через setEnabled(false)
Проблема в том, срабатывает эвент ACTION_MOVE, а ACTION_DOWN нет - ведь вьюшка была заблокирована в момент приложения пальца.
В итоге получается очень не желательное поведение, которого должно происходить, только если был эвент ACTION_DOWN.
Как игнорировать все эвенты, перед которыми не было ACTION_DOWN?
Ничего не приходит в голову, кроме как в onDown() ставить переменную в true, а в другом месте проверять и после действия ставить обратно в false.
Блядь, хуепадла ACTION_DOWN втискивается еще до блокировки вьюшки, и затаивается там, как сука крыса на весь процесс блокировки. А потом продолжает свое дело как ни в чем не бывало.
Видимо, вместо setEnabled придется еще и откручиватьэ\прикручивать OnTouchListener.
Причем, втискивается в милипиздрическое окошко по времени, пока вызывается метод и доходит до строки блокировки вьюшки.
Коварно как.
Подробнее про вьюхи: какие и что на них будет отображаться.
Если хочешь - сразу на мыло: kots<-20162ANUSgmR(`ailPUNCTUMcgYqom
Я вот использую Visual Studio 2010 Express для C# и по сравнению с AndroidStudio она выглядит максимум легковесной.
core i5 4690 8 gb ram
Маня. Обфускация - не панацея. Ты же не будешь например хранить secret_key в четырежды минифицированном js на странице. Отличие минифицированной жсины от обфусцированного жабоговна отличается лишь необходимостью декомпиляции последнего. Конечно, ты можешь хранить апи ключи в клиенте сделав многоходовочку - есть надежда, что просто не будут там искать.
Щас вот открыл дашчан пока что.
Глянь здесь haskell.org
В дата леере контект какраз таки плавает, ибо там в любом случае приходится иметь дело с интернет конекшном.
Остальные классы либо во вью, либо в дате.
Гугли про CoordinatorLayout, если я правильно тебя понял
activity_layout.xml
activity_content.xml
cardView.xml
так вот в контенте у меня RecyclerView из CardView
на CardView кнопочки, как мне написать для них обработчик нажатий и как привязать к обьектам, чтобы кликнув по карточке я мог получить id обьекта, который эта карточка представляет?
Посмотри исходники barcodescanner в проекте zxing на github
почему многие методы стандартной библиотеки начинаются с on? onStart, onCreate, onSet.., это специальная синтаксическая приблуда закрепленная традиционно или как? Или есть спец смысл?
onStart - при старте.Сразу понятно, когда вызовется этот метод.Такое много где встречается (onClickListener тот же).
setRepeatCount(INFINITE);
setRepeatMode(REVERSE);
Хочу, чтобы некий метод запускался, когда анимация заканчивается до возврата обратно. То есть, один раз за цикл туда-обратно, в его середине.
Не получается через AnimationListener.
onAnimationRepeat выполняется два раза за цикл, а onAnimationEnd вообще ни разу.
Как, посоны?
Или нужно сделать анимацию без повторов, а уже в ее AnimationListener выполнять метод, который сделает что нужно и запустит другую анимацию, которая движется в обратную сторону (а в конце запустит первую)?
Скачать zip.
Запустить андроид студию.
File -> import project на распакованную папку.
Run -> Run/debug
Спасибо, попробую.
>gradlew installDebug
Ну проще разве что для красноглазых пердоликов, у которых припадки эпилепсии от человеческих интерфейсов.
Но это же реально проще и быстрее.
В js-тред, уебище.
Exception: Cannot read raw response body of a converted body
при попытке прочесть сырой body?
String raw = response.raw().body().string()?
Как сделать чтобы фоновое активити было темнее, чем popup?
Как сделать анимацию, чтобы popup появлялся снизу вверх?
На питоне есть киви, ебашишь сразу под всё кроме винфона.
А нахуя активити то? ебашь алерт диалог или диалог фрагмент, а там уже гуглится как анимировать эту срань
У активностей можно переопределить анимацию через overridePendingTransition.
> Как сделать чтобы фоновое активити было темнее, чем popup?
Че?
>>939531
> алерт диалог или диалог фрагмент
Менее удобно же, с активити есть ламповый onActivityResult, а не богомерзкие колбэки. С просто алерт диалогом нихуя не удобно работать, если тебе приходится setView делать.
Никак. Показать ему диалог с инфой что без разрешения кина не будет, и выдать он его может в настройках, можешь даже сделать кнопочку которая его в эти самые настройки кидать будет, с помощью интента.
Ага, спс. Так и сделаю.
Зачем его сохранять? Он же по-идее должен генерироваться при каждом логине и удаляться через какое-то время неактивности.
Ниче не меняй, так нормально, можно сделать что бы он через некоторое время становился неактивным, это все на серваке.
Просто используй DialogFragment
Помогло, благодарю.
ПРОСТО берешь и запускаешь интент ACTION_PICK
В результате получишь uri к файлу, если ты не с помощью DocumentProvider'a делал, то прийдется попросить пермишен на внешнюю память. А дальше берешь одну из сотни кропалок с гитхаба и без задней мысли кропаешь.
>>а не богомерзкие колбэки
если собираешься быть андройд разработчиком то придется привыкать, они везде
Если это временная сессия, то нормально и так. Если это какой-то более живучий по времени токен, то его хранят в AccountManager.
Нужно сделать чтобы даты выводились как в скайпе. Всегда висела полупрозрачная дата сверху, а при скролинге встраивалась в divider.
Есть варианты?
Хм, сейчас подумал что проще всего будет декомпилировать сам скайп
Хуйня будет. Делаешь тип вьюхолдеров для дат, они будут в общем списке. А по скролу берешь у LinearLayoutManager'a первую и последнюю частично видимые позиции, дальше опираясь на свой список данных чекаешь есть там интересующая тебя дата или нет. Если есть прячешь отдельную вьюшку, показывающую дату, иначе делаешь ее видимой, как-то так, но я пиздабол с двача и возможно это будет не эффективно/не красиво.
> но я пиздабол с двача и возможно это будет не эффективно/не красиво.
На самом деле норм, сам так делал.
Обоссал тебе ебало.
> Бэкстек фрагментов сохраняется
Я значит неправильно причину определил. У меня один фрагмент добавлялся в активити при создании (в onCreate), и потом он заменялся (когда нужно) на второй с помощью replace. При пересоздании активити фрагменты накладывались друг на друга. Я думал что там с бекстеком какие-то пиздарики, - но проблема в том что первый фрагмент добавляется всегда, и при восстановлении активити - кода он уже в бекстеке и новый добавлять не нужно. Какой нормальный способ следить за подобным? Конкретно в моем случае достаточно проверить глубину бекстека, это норм подход или нужно что-то более надежное писать?
Спасибо анон, пошёл пилить.
Короче в пизду, ебанул колбеком.
> Мне же нужно что бы оно подождало завершения анимации
Берешь onBackKeyPressed, вызываешь в нем анимацию без super, в onAnimationEnd - finish. Но это похоже на лютую хуйню, что ты пытаешься сделать.
Вот типа такой хуйни пытаюсь сделать - https://developer.android.com/design/material/videos/ContactsAnim.mp4
Там прежде чем закрывается активити floatingActiobButton сворачивается в точку. Соответственно при создании активити она восстанавливается обратно. Т.е. у меня будет куча анимаций (на каждую вьюху) и мне надо было сделать функцию, которая бы их все вызывала при открытии и при закрытии активити.
Так-так. Вот тут по подробнее. Мне вообще что нужно - чекнуть бд на предмет записи, если запись == null, то вызвать функцию. Если запись != null, то сделать реквест на сервер, получить ответ, сохранить его в бд и вызвать функцию. Получается, я могу этот запрос сделать из flatMap? Но как тогда быть с вызовом функции? Бросить эксепшон и вызвать её в onError? Так бы не хотелось делать.
А, точно, я же могу просто null вернуть и в subscribe если null то вызвать функцию.
Зачем тебе onLoggedIn() в onError, у тебя такого не было.
> Бросить эксепшон
Есть же Observable.error, этот метод лучше чем throw.
>Зачем тебе onLoggedIn() в onError, у тебя такого не было.
Короче там суть в том, что эта функция вызывается в любом случае. Она запускает новое активити, даже если произошла ошибка. Просто само активити будет работать либо в гостевом режиме (если в бд не было логина и пароля) либо не в гостевом (если логин и пароль в бд были и авторизация прошла). Вообще, наверно, лучше поменять их на две разных функции.
>Есть же Observable.error, этот метод лучше чем throw.
Запомню.
Пиздец макаронину ты написал
Пиздец, на 30к просто сразу нахуй. Еще не удивлюсь, если позиция была на джуна.
ПЕРЕКАТ https://2ch.hk/pr/res/940781.html (М)
ПЕРЕКАТ https://2ch.hk/pr/res/940781.html (М)
Дожили, открыть консольку и ввести одну команду умственно-остальным дегенератам уже сложно, им подавай жирную иде на скачивание чтобы разово собрать какую-то срань.
*отсталым, конечно же.
Лучше сделать REST-сервис, а не использовать FTP.
Мы используем AdapterDelegates
Сейчас вот задумали писать под него в том числе Android-клиент.
Подскажите, какой библиотекой проще всего организовать отправку и получение данных по POST в Android? А то я вот сейчас читаю и понимаю, что вариантов дохуя, при этом половина уже deprecated
Что нынче в тренде по этой теме?
Retrofit/Guava (последняя - многофункциональная йоба, если нужно только запросы делать, лучше - Retrofit + OkHttp)
Я тут просто попробовал пару приложений накатать совсем простых. И вроде все удобно и интуитивно понятно после AndroidStudio.
Поясните, кто любит, кто ненавидит и за что, почему...
Та же хуйня, решил вкатиться в ведро потому что думал, что веб и энтерпрайз это мерзко, а на всё остальное вакансий всё равно нету.
Только я ещё и живу в ебенях, и в отличии от тебя мне надо переехать и снимать хату и ещё мне 27.
Впрочем, если ничего не получится, то думаю выпилиться, так что похуй, уже можно сказать смирился.
Удали нахуй. Реально. Это убийство моих глаз должно умереть. Разбей логику по clean mvp
Вы видите копию треда, сохраненную 6 мая 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.