Этого треда уже нет.
Это копия, сохраненная 6 мая 2017 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
43 Кб, 400x267
Android Development Thread 2.1.0 #919538 В конец треда | Веб
Android Development Thread 2.1.0

> Хочу вкатиться в разработку под 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 (М)
#2 #919541
Принимаются варианты для следующих ОП-пиков
919734919934919937
58 Кб, 489x604
#3 #919573
>>919117

>Это не учебник а скорее справочник. Но годный. Не повторяй моих ошибок - не вкатывайся начиная с него.



Почему? Он идеально по типу От простого к сложному. Может ты реально Справочник Шилда использовал.
Потому что у него по языкам есть как учебники так и справочники.
Я по Шилду шарп изучал немного. Теперь буду использовать как справочник потому что у них очень много общего с Джавой.
919733919898
#4 #919581
Анон, что значит "application is idle"
Что оно в onPause()?
919584919595
#5 #919584
>>919581
Вагина тваей мамашки защемила хуй маги.
#6 #919595
>>919581
Откуда это?
#7 #919733
>>919573
Может сначала лучше человеку с неокрепшей психикой Эккеля почитать, дабы вкатиться ?
919807
#8 #919734
>>919541
Трапы закончились ?)
#9 #919746
Катаны, теряюсь в догадках, а решить нужно быстро: что бы вы рассказывали людям первым делом, когда знакомили их с разработкой под ведро ? Пока что думаю рассказать базовую информацию по Gradle, манифесту, соответственно перечислить основные компоненты приложений - Application, Activity, Service, IntentService, BroadcastReceiver, ContentProvider. Потом уже после введения на первой лекции думаю рассказать более детально об Activity. Вопрос - насколько детально, и правильный ли я подход выбрал ? Люди знакомы с ООП, скорее всего на уровне джунов владеют шарпами.
919747920889
#10 #919747
>>919746
Вкратце программа на ближайшие лекции четыре-пять выглядит так:

1) Сборка проекта. Управление зависимостями​
2) Стандартные компоненты. Составляющие приложения​
3) Проектирование UI и верстка​
4) Пакет java.util.concurrent. Асинхронное выполнение задач​
5) Работа с базами данных. Пакет android.database​
6) Обращение к сети. Пакет java.net​
7) Шаблоны проектирования. Архитектура приложений​
8) Unit-тестирование. Функциональное тестирование
919797
#11 #919784
Аноны, как вы работаете с OAuth? Юзаете какие то либы?
919788
#12 #919788
>>919784
retrofit, okhttp
919809
#13 #919793
Как создать таймер по типу секундомера?
#14 #919797
>>919747
Добавь

0) Kotlin

А вообще взял бы современную книжку по android с хорошими отзывами и заюзал бы ее оглавление
919802
#16 #919807
>>919733
Хуйня какая то для хипстеров.
#17 #919809
>>919788
ну это же только для получения токена, а открыть браузер и получить от туда "code"
919873
#18 #919814
привет, аноны, у меня к вам такй вопрос, что вроде как и кажется, что элементарное, но и не совсем. В общем, как реализовать TextView так, что при задавании ему слишком большого текста (например, более 3 строк) в конце ставилось троеточие и текст остальное обрезался?

Да, я знаю, что есть ellipsize="end", но оно не подходит тем, что может обрезать слово посередине. Например : "слишком длинный те...". А мне нужно, чтоб все слова оставались целыми, если уже и приходится обрезать, то часть слова не оставалась.

Кто-то такое реализовывал или возможно знает как такое сделать?
#19 #919873
>>919809
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(%юрл сюда пихай%));
startActivityForResult(intent, 228)
#20 #919898
>>919573
Реально попутал. Один фиг там сначала этот учебник встроен.
#21 #919922
Анон, я тот нуб-кун из Киева. За недельку склепал аппу на 1500 строк юзающаю retrofit для openweather, picasso, Google maps api. Из корного: лоадеры, адаптеры, анимации, фрагменты и ещё кучу всякой мелкой дичи типа пермишинов, мультипотточности и тд. Что бы ещё сделать для портфолио что бы вкатиться джуном в киев.
#22 #919925
Анон, как лучше всего организовать хранение данных? Суть токова: в приложении должен быть телефонный справочник и некая справочная информация. Причём, должна быть возможность и то и другое редактировать централизовано.
Я пока додумался вот до такого: есть фтп-сервер, на котором лежит справочник в виде xml, справочная информация в виде html-страниц. При каждом запуске или по таймеру приложение коннектится к этому серваку и скачивает эти данные, если они изменились.
Делаю своё первое относительно большое приложение практически с нуля, поэтому не знаю, как вообще подобные штуки реализуются. Этот способ мне показался наиболее простым.
Или может как-нибудь по-другому это можно реализовать?
944887
#23 #919934
>>919541
Вебемкой вот это видео
https://www.youtube.com/watch?v=tVl2fkUY5PI

Кек.
64 Кб, 480x305
#24 #919937
#25 #919959
Как делать модульные приложения? Например как Total Commander для которого можно скачать модули в виде отдельных apk, которые расширяют функционал.
919977
#26 #919977
>>919959
смотри что такое productFlavours
920007920036
#27 #920007
>>919977

>смотри что такое productFlavours


Product flavours это для сборки разных версий одного приложения. А нужно: базовое приложение + модули расширений. Например у меня есть com.example.app и я хочу что бы пользователь мог поставить модуль расширения com.example.app.extension с возможностью вызывать методы из этого пакета в основном приложении com.example.app
920024
#28 #920024
>>920007
Bind Service AIDL IPC.
ContentProvider
#29 #920036
>>919977
Ебал тя в глотку.
133 Кб, 340x340
#30 #920211
>>919922

>За недельку


>склепал аппу на 1500 строк юзающаю retrofit для openweather, picasso, Google maps api. Из корного: лоадеры, адаптеры, анимации, фрагменты



Представляю какое у тебя там месиво и спагетти из г####-кода :)
920217920493
#31 #920217
>>920211
Да ладно тебе, в 1,5k строк наврядли реально месиво сделать, даже если в одном классе все. Это нужно талант иметь (не иметь)
#32 #920356
Как организовать с rx подобную шляпу:
1) На определенном экране подписываюсь на обновление конкретной таблицы в базе (storIo);
2) Получая обновления отображаю их;
3) По клику на кнопку делаю всякие другие штуки;

Вроде как с первым и вторым пунктом все понятно, проблемы возникают с третьим, вот наивный вариант:
http://pastebin.com/LLVfvWdS

Я попробовал с сабжектами, гляньте может где ненужная аллокация новых обсервеблов, или можно проще:
http://pastebin.com/AwKSsQ9C
11 Кб, 272x364
#33 #920368
Прочитал первый том хорстманна. Стоит ли что-то из второго читать?
#34 #920493
>>920211
Нуб то нуб. Но кодю года три, олимпиадник да и кто такая банда четырех знаю. Просто до этого кодил лабы, всякую херь да курсачи/дипломы.
920496920524920803
#35 #920496
>>920493
upd: Может ли кто то заодно подсказать куда копать что бы при удалении элемента карточки из ресайкла запилить анимации передвижения карточек. notifyDataSetChanged просто перезапускает адаптер как я понимаю.
920532920730
#36 #920504
>>919922
Что за аппа-то?
920518
#37 #920518
>>920504
Вот то что выше в прямом смысле - карточки мест с картинкой, дистанцией до заданной локации и погодой в этом месте. Их можно добавлять, да модифицировать - указывать ссылку нахождения пикчи или выбирать ее с помощью файлового менеджера. Локацию вводить гмапс апи. Все правослано через провайдеры/лодеры/адаптеры. Настолько что точно пойду учить реакт ради нахваленого выше сторио.
393 Кб, 650x650
#38 #920524
>>920493

>олимпиадник


уженеШкольничек-властелин-laba1, пытается кого-то удивить
920528
#39 #920528
>>920524
Не школьные олимпиады. И отъебись ты уже от меня если сказать нечего.
920572
#40 #920532
>>920496
И могут ли быть на собеседовании вопросы про внутрянку HTTP(Не только что такое гет/пост а и расписать что еть что в запросе и как его сформировать , можно ли вкратце рассказать про OkHttp?) или внезапно HTML(стоит ли повторять, разметку я то прочитать могу, а вот с ходу написать что то нет)
#41 #920541
Написал пару крудов, одно чуть более сложное приложение.
Хотелось бы угореть по MVP, собрал за некоторое время кучу статей. К сожалению, большинство из них очень короткие и описывают в общих чертах что это за архитектура и потом набрасывают пример который и без MVP бы не умер.
Некоторые ещё и предлагают использовать свои какие-то васянские либы-реализации MVP использовать (в туториалах обучающих MVP).
Короче, я хотел бы изучить вопрос в минималистичном сеттинге, где все интерфейсы пишутся и реализуются с нуля, и если используется хуйня типа Rx, event bus, DI или ещё чего-то, то только после того как появились проблемы а не сразу блядь всё.
Проходил какой-то мини-туториал от гугла что-то там про тестирование. Сделали годно, но может есть что-то более развёрнутое?
920927
#42 #920564
>>919922
Много там в киеве джунопозиций? Я что-то по объявлениям не сказал бы. Сам думаю вкатываться джуном по весне, но мне надо будет переезжать.
Вообще, не хотел бы ехать в киев, предпочёл бы одессу или львов.
Впрочем, судя по количеству вакансий может ещё никуда не поеду и пойду работать на стройку. Кто что может пояснить за джунские позиции в украине?
sage #43 #920572
>>920528

>Не школьные олимпиады


А ну это другое дело, так домашку уже сделал?

Ну честно, я понял - ты можешь препод тебя натаскал решать стандартные задачки из учебников.
Плюс ты пролистал GoF и вызубрил ты же олимпиадник паттерны aka фиксы ущербности ООП.
Хотя лучше бы SICP осил бы или Haskell.

Но с чего ты взял, что ты можешь стать хорошим программистом и писать понятный и поддерживаемый код?
920583920584
#44 #920583
>>920572
Потому что мне нравиться кодить, мне интересна платформа и я хочу изучать ее. Или у нас в кодерах только те у кого на левой ягодице метка, спец службы находят их и они в яслях пишут проекты на миллион? Я не ебаный избранный Нео. Но я хочу въёбывать над тем что мне интересно.
920615921092
#45 #920584
>>920572
С зубрежкой хуево кстати.
#46 #920615
>>920583
Кодь и не обращай ни на кого внимания, можешь даже код понятный не писать. Про олимпиады, впрочем, никому не рассказывай в контексте разработки.
122 Кб, 297x283
#47 #920665
Правильно ли я понял что для каждого типа экрана следует клепать свою формочку?
https://developer.android.com/training/basics/supporting-devices/screens.html
920744
#48 #920730
>>920496
notifyItemRemove? можно еще в сторону diffUtill посмотреть, люди его советуют юзать. Но у меня пока руки не дошли
#49 #920739
Гайс, а че тут все так на стор ио дрочат? Нативный sqlite уже не котируется?
#50 #920744
>>920665
Нет, делай сразу растягиваемые формочки.
920928
#51 #920788
Решил изучить разработку под мобильные усройства. Загрузил Андроид студио - и немного присел. Виснет "намертво" после долгой загрузки главного окна.
Какие ему нужны системные требования-то? Нет среды разработки полегче? Как мне быть то :(

2гига ram, 2 ядра на пассивном охлаждении, до этого момента с тормозами не сталкивался
920829
#52 #920803
>>920493
олимпиадник в общем то может рассчитываться как оскорбление, ибо олимпиадный код всегда нарушает овердохуя правил нормального кода проекта
#53 #920825
Слушайте, андроидокуны. А что вы все время разрабатываете? Вот реально интересно стало. У меня идей нет совсем, вот прям совсем. Всё ведь есть уже, а игори один кодер не сделает. Какое такое приложение можно сделать, чтоб заебись и не ебаться с нейросетями? Уже и парсеры всевозможные есть, и погодные аппы, и агрегаторы и справочники, и поисковики и пиздец. В общем, уже есть всё, так что же сделать такое, чего нет?
920832920880921040
#54 #920827
Как поменять цвет фона в контекстной и бар-менюшке? Это делается через стили, я правильно понял?
927084
#55 #920829
>>920788

>Виснет "намертво" после долгой загрузки главного окна.


Попробуй увеличить heap до 1Gb

>Нет среды разработки полегче?


Eclipse
#56 #920832
>>920825

> А что вы все время разрабатываете?


Очередной клиент к рестопараше, тысячи их.
КАЧАЙ @ ПОКАЗЫВАЙ @ КАЧАЙ @ ПОКАЗЫВАЙ @ КАЧАЙ @ ПОКАЗЫВАЙ @ КАЧАЙ @ ПОКАЗЫВАЙ
Уже блевать охото.
#57 #920880
>>920825
Что ты так боишься ебли с нейросетями, бля? Все эти распознавалки хуйни давно закодили.
А вообще, углубление обычно идёт в конкретную область. Например, какая-нибудь специфическая ебля с системными настройками, через всякие дырки в системе. Или там сетевой клиент по какому-нибудь протоколу. Или ещё какая хуйня со сложными вьюхами
#58 #920885
>>919922

>вкатиться джуном в киев


Чувак, джуны в киеве не нужны уже как пару лет. Тебе надо думать об иммиграции
920924
#59 #920889
>>919746
Я бы немного рассказал про процессы в юниксе, UI-поток в ведре. Потом структура приложения и схема его работы. Потом - активити и прочее
#60 #920924
>>920885
а в иммиграции джуны нужны что ли?
#61 #920927
>>920541
Просто осознай суть, и пили свой велосипед, который будешь на протяжении нескольких проектов подтачивать. MVP у каждого свой, вопрос предпочтений же. Можешь посмотреть статьи Mosby о его вариации
#62 #920928
>>920744
фи, а кто будет делать разный дизайн для телефонов, 7' и 10' ?
#63 #920930
Возвращается кэширование-очень-нужно-ананас из предыдущего треда. Вопрос следующий, насколько вменяема модель поведения в контексте мессенджера:
1) подключаемся на прослушку сокета после получения токена сессии, все сообщения полученные по этому каналу сплитим, в зависимости от данных в json-ах, приводя к нужным типам данных.
2) после получения обновления - пишем в базу, с использованием реактивной DAO обертки. Суть в том, что далее все подписчики по нужным эвентам будут извесчены что есть новые данные в таблице и будут получены с их стороны данные об измененном/добавленном ресурсе.
3) подписчик в лице презентера соответственно подписывается в начале жизни на нужный DAO, буфферит изменения, как только к нему байндится вьюха - сплевывает в нее свежие данные из бд. Так же обновляет в реальном времени.

Меня лично пугает немного сложность, когда расписываю это на словах. Но поскольку нужно, чтобы все быстро грузилось, и показывались обновления в реальном времени (а пинг до сервера около полутора секунд) - понятное дело нужно ввести кэш, и более вменяемой реализации его я не придумал.

Expiration будет скорее всего просто по количеству записей. То есть храним n-ное количество переписок, обновляя данные по ним, когда создается новая или старая выходит в топ - трем каскадно все таблицы связанные с перепиской последней по обновлению и вносим новую
921062
#64 #921040
>>920825

> что же сделать такое, чего нет?


Найди работу ba dum tss*
тогда и не будешь задавать такие тупые вопросы
#65 #921062
>>920930

>нужно, чтобы все быстро грузилось, и показывались обновления в реальном времени (а пинг до сервера около полутора секунд)


Для мессенджера как по мне похуй, мне тян не отвечают по полтора часа а потом пишут извини занята.
#66 #921086
Допустим, есть служба, которая даже при всех закрытых activity делает что-то каждый час, например. И отображает счетчик в activity.

Если делать таймер через залупленный CountDownTimer - телефон не войдет в sleepmode так?

Я правильно понимаю, что такое нужно делать через AlarmManager?

Но ведь из AlarmManager нельзя вытащить прошедшее время, а мне нужно, чтобы при открытии activity отображался актуальный счетчик оставшегося до исполнения времени.

И при этом, чтобы телефон мог баиньки. Как усидеть на двух стульях?
921091
#67 #921091
>>921086
Что думаете про такой вариант?
1) Activity сворачивается\умирает
-CountDownTimer останавливается записывается текущее время\дата ирл.
-Стартуется AlarmManager с оставшимся временем на счетчике

2.1) Если до конца таймера activity не возобновляется - AlarmManager делает свое черное дело до конца.
2.2) Если до конца таймера activity возобновляется - AlarmManager прибивается, вытаскивается сохраненное время\дата ирл и сравнивается с текущим время\дата ирл, чтобы определить сколько времени прошло.

Как еще можно сохранить счетчик, не насилуя батарею?
#68 #921092
>>920583
Не слушай даунов, кодинг — примитивный макакинг (особенно когда идёт речь про мобилки или веб) и стать кодером может вообще любой, не нужно утруждаться вопросами «смогу ли я». Просто делай и всё будет хорошо.
А олимпиадник это даже плюс, довольно хорошо развивает как программиста и даёт некоторые навыки написания эффективного кода.
93 Кб, 470x585
#69 #921103
Как убрать индексирование изображений в отдельной папке?
Создал файл .nomedia, почистил кэш, остановил службы, отвечающие за галерею (вроде как все), ребутнул смартфон и все-равно этот ебучий андроид добавляет мою порнуху с понями в галерею.
#70 #921163
Ее-е а кто это на ОП пике?
921384
#71 #921279
Вопрос про использование MVVM в андроиде.
В WPF он есть. В AngularJS он есть. В андроиде вообще нихуя нету? Только MVCP, только хардкор?
921388921595
#72 #921384
>>921163
Так это ОП и есть. Ты ньюфаг что ли?
20 Кб, 500x251
#73 #921388
>>921279
Хочешь MVVM — бери и делай MVVM.

> В андроиде вообще нихуя нету?


Архитектура в твоём приложении, а не в андроиде.
921414
#74 #921400
Аноны, поясните: нахуя в clean architecture и им подобных используется отдельный набор сущностей для domain-слоя, если он управляет чисто обработкой? Алсо, когда вам нужен только один параметр из сущности, добываемой из репозитория (url из аудио или изображения, юзернейм из юзера и т.д.) - в каком слое вы разбираете эту сущность, и передаёте отдельный параметр дальше?
921588
#75 #921414
>>921388
Архитектура может быть ограничена сдк ведра, тот же злоебучий контекст например.
921423
#76 #921423
>>921414
Ну и какая тебе нахуй архитектура, если ты даже от контекста абстрагироваться не научился? Возвращайся, когда поумнеешь, тогда можно будет и архитектуру обсудить.
#77 #921588
>>921400
Потому что он может содержать больше/меньше информации чем нужно пользователю. В 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
#78 #921595
>>921279
В андроиде есть DataBinding - https://developer.android.com/topic/libraries/data-binding/index.html - тот же WPF но сильно упрощенный.
Но я считаю что писать код в xml это зло, если так хочется mvvm, смотри в сторону Rx bindings
921625
#79 #921625
>>921595
Спасибо бро.
Зло, описывать всю логику взаимодействия контроллера с вьюхой через биндинги. Но для простецких задач, типа, привязки полей модели к инпутам вьюхи - вполне себе норм. Не нужно писать кучу ненужного кода и заняться решением бизнес задач.
#80 #921662
А есть ли какой-то способ не используя ContentProvider получать уведомления об изменении контента в базе данных ?
921881921892
#81 #921881
>>921662
В StorIO есть rx обертка над ним. А так - нет.
#82 #921892
>>921662
Ну в общем то, была бы она на rx2 - я бы не рыпался, но увы. Поскольку проект висит на rxJava2 - то не могу позволить себе подключить первый только ради этого
921920
#83 #921903
Хм, а как лучше организовать общую абстракцию для работы с сервером и с базой - предоставлять фабрики DAO для каждого из ресурсов из репозиториев и сводить к одному в модели c добавлением хэндлеров на случаи ошибки ?
921908921915921921
#84 #921908
>>921903
А зачем тебе общая абстракция для сервера и базы? Это как-бы разные вещи. Или у тебя ремоут база с которой ты тоже по хттп общаешься?
#85 #921915
>>921903
Пытаюсь попробовать на уровне модели разобраться со свичем между загрузкой с сервера и из базы с сохраненными ранее данными
#86 #921920
>>921892
Просто подключаешь interop, тебе не нужно подключать первую.
921932
#87 #921921
>>921903
Паттерн репозиторий
922784
#88 #921932
>>921920
Что? Можешь попродробнее ?
921982
#90 #922077
А кто-нибудь делал тут unit-тестинг своих классов, использующий storIO ?
922311923025
#91 #922087
В частности интересно как проверить работу sqlite триггеров
#92 #922250
Приветствую. Читаю про Даггер вот это https://habrahabr.ru/post/279125/ и не могу понять как использовать конструкторы модулей.
Я так понял, модули ты пишешь не для себя, а для компонента, который будет их использовать. В смысле, ты в коде модулей вообще не касаешься. А как тогда использовать конструктор, чтобы передать тот ж контекст?
Или я все неправильно понял?
922467
#93 #922297
Поясните про это гуглоподелие? Для теста компилятора брал таймзоны ftp://ftp.iana.org/tz,
вывод показал кучу несоответствий стандартам POSIX. Как Андроид работает с этой датабазой несоответствующей POSIX?
#94 #922311
>>922077
Юниттестировать классы, работающие с бд - пердолинг, бесполезный, если все делать по правилам.
Куча ненужного кода, который уже реализован в тестируемом классе. А использовать уже написанный нельзя - ведь "азаза не независимый тест". В итоге тратишь на тесты времени больше, чем на тестируемый код.

Либо вертеть на хую фанатиков независимых тестов, и тестировать в качестве "интеграционных тестов", в определенном порядке.
922335
#95 #922335
>>922311
Например, тебе нужно протестировать метод, который удаляет что-то из базы данных.

И чтобы это было юниттестом, ты не должен использовать уже написанный и оттестированный метод записи в бд.

Ты должен написать костыль записи тестового значения, который сфейлится при изменении структуры бд, или просто не будет работать так, как нужно - ведь никто не будет писать тест на тест.

В итоге то, что ты мог уместить в две строчки. используя готовый и оттестированный метод - будет раздуто в раздутую глючную хероту.

Но зато юнит-идеалисты будут довольны.
922343
#96 #922343
>>922335
И опять же, при изменении структуры бд тебе всегда придется переписывать тесты вместе с методами.

Лучше и аккуратнее и менее ресурсозатратно - тестировать методы, работающие с бд, последовательно.
Создал, записал, вытащил, проверил, удалил.
#97 #922459
Ничего не могу найти на этот вопрос. Виджеты разделяют с приложением экземляр application или нет?
То есть, общие глобальные переменные через него возможно делать?
922470
#98 #922467
>>922250
Если у тебя есть модули с конструктором ты их сам создаешь и передаешь компоненту при его создании.
Пример из твоей же статьи:
[CODE]protected AppComponent buildComponent() {
return DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}[/CODE]
922485923084
#99 #922470
>>922459
Да, applicationContext у вас один.
#100 #922485
>>922467
спасибо
#101 #922508
https://habrahabr.ru/post/320242/
Господа, кто-нибудь реально убирает ифы в своих адаптерах, и пишет подобный велосипед? Это же полный пиздец и код ради кода, нет?
Если, например, у вас адаптер работает в двух режимах отображения элементов, в зависимости от параметра X - придётся либо использовать ифы, либо устраивать велосипед из енамов енамов.
922786944915
#102 #922613
Призываю тех кто много кодит приложух. Вот смотрите, в веб-программировании, нужно подгонять сайт под различные разрешения и браузеры. А как с этим обстоят дела в андроид? Нужно ли пердолить приложение под каждый телефон, версию андроида итд? Сильно ли это заебывает или всё просто? Казалось бы джавовское write once run anywhere, а на деле хуй.
922672922688922690
#103 #922672
>>922613
Пиздуй в гугл, все это разжевано донельзя.
Write once run anywhere больше касается архитектуры, радуйся что тебе не нужно задумываться "так это x86, тут sequential consitency, а вот тут для arm, нужно добавить memory fence иначе процессор может поменять инструкции"
922680922689
#104 #922675
Пиздец какой-то, зачем гугломакакии назвали widget пакет с различными классами view?
Нагуглить что-то путнее про сами виджеты очень сложно, как примеры так и статьи, 90% поиска забито херней уровня android.widget.TextView.
922679
#105 #922679
>>922675

> зачем


Чтобы js-макакам было неприятно.
#106 #922680
>>922672
Та нихуя там нету. Интересует мнение местных ананасов.
#107 #922688
>>922613

>Казалось бы джавовское write once run anywhere, а на деле хуй.


Примеры приведи.
#108 #922689
>>922672
Разные разрешения и версии дроида есвенно. Второе фиксица библиотеками поддержки которые дают в старые версии функцианал новый. Но иногда бывают нюансы. В 5 дроиде появился материал дизигн, в 6 безопасность слегка поменяли. Версии ниже 4 почти не поддерживают.
#109 #922690
>>922613
У явы ток кор нормальный все потуги в гуи - фейл завязаный на платформе а не вм
#110 #922720
>>919538 (OP)
Аноны, мне надо сделать тестовый компонент даггера, но в тестовой директории почему то не генерируется класс компонента, как быть?
#111 #922784
>>921921
Двачую. А лучше Unit of work. А еще лучше CQRS, но это хайлевел.
#112 #922786
>>922508
Забей хуй. Это для мамкиных GoF адептов, недавно прочитавших про хуяттерны и пытающихся внедрить их везде где можно и нельзя. Используй KISS и YAGNI.
#113 #922866
Есть сайт с кривым недокументированным api. Есть android приложение которое это api пользует. Как бы мне посмотреть какие http запросы отправляет приложение?
922879922914922986
#114 #922879
>>922866
Вот возьми и погугли это.
#115 #922914
>>922866
поставь прокси в настройках wifi + Fiddler
#116 #922986
>>922866
Если поставить запустить его через debag - там же будет url запроса в логах.
#117 #923025
>>922077
Ну к слову, сейчас начал пробовать сделать это как у них в сэмпле, вроде как не нужно менять свои классы, с роболектриксом то. Пока что правда запустить не удалось, но это вроде бы у меня косяки с SQL синтаксисом
#118 #923084
>>922467
А как сделать, чтоб DaggerAppComponent начал компилиться? Ребилд не помогает
923406
#119 #923209
Народ, помогите.Я еще нуб. Пилю небольшое приложение, нужна помощь с SQlite. Можете подкинуть ссылки на проекты с ее использованием? Просто, много инфы с простыми примерами, которые я понимаю. Но мне надо например пример с использованием SQ-ных VIEW, триггеров и т.д. Когда много таблиц. А то что-то сижу и не вдупляю ни хрена.
923390
#120 #923337
>>919538 (OP)
Как тестить метод презентера с rxjava? Понял, что надо менять оба scheduler'a на immediate, но при нем тест падает в throw new RuntimeException(...) хотя это должно обработаться в subscriber'е в onError
923410
#122 #923406
>>923084
Когда использовал его - замечал что нужно использовать где-то модуль, чтобы он начал билдиться. То есть отдельно модуль без компонент и без инжектов иногда билдиться не хотел
923409
#123 #923409
>>923406
UPD: аналогично - с компонентами, нужно их использовать где-то
#124 #923410
>>923337
Показывай код.
923418
#125 #923418
>>923410
беру данные из инета, если IOException беру из бд, если там пусто делаю вот так:
if (data.isEmpty())
throw new RuntimeException(throwable);
т.е. просто пробрасываю дальше, на девайсе всё работает как надо, а тест падает именно тут - throw new RuntimeException(throwable);
923421
#126 #923421
>>923418
Нормальную ошибку кидай, а не рантайм, может помочь. Если к слову кидаешь внутри какой-то функции - то нужно в ней же и отлавливать, вроде как. То-ли баг, то-ли фича, черт его разберет
923428
#127 #923427
А есть ли какая-то возможность на время выполнения AFTER %OPERATION_NAME% SQLite-триггера отложить все запросы и выполнить после завершения запроса триггера ?
923435
#128 #923428
>>923421
так если я его там отлавлю то в onError ничего не придет, а мне надо туда, это именно какая то хуйня с immediate шедулером, как мне кажется
923434923438
#129 #923434
>>923428
попробуй observable конвертнуть в блокирующий - toBlocking()
А вообще вот эта хуйня с перекидыванеим это игрушка дьявола ежжи, надо оборачивать как все крутые посоны, возьми какую-нибудь имплементацию Try с гитхаба, или свою напиши по мотивам.
923436923441
#130 #923435
>>923427
Что мешает заменить AFTER на BEFORE? Сначала срабатывает триггер, потом уже запрос.
923442
#131 #923436
>>923434

>хуйня с перекидыванеим


>возьми какую-нибудь имплементацию Try с гитхаба


ты о чем?
923733923736
#132 #923438
>>923428
Забей на immediate scheduler и используй TestSubscriber.
923439
#133 #923439
>>923438
так где его использовать? вот у меня в презентере есть метод - получить данные, проверить их и послать вью, или послать во вью ошибку, и я хочу проверить какие методы вью вызываются
#134 #923441
>>923434
Не слушай глупенького мальчика, не делай асинхронный код блокирующим
#135 #923442
>>923435
То, что триггер должен срабатывать после INSERT-а, очевидно же, лол
923448
#136 #923448
>>923442

>То, что триггер должен срабатывать после INSERT-а, очевидно же, лол


>А есть ли какая-то возможность на время выполнения AFTER %OPERATION_NAME% SQLite-триггера отложить все запросы и выполнить после завершения запроса триггера ?


Вот совсем не очевидно, знаешь ли.
Давай лучше пример покажи, что ты хочешь сделать. Например "Хачю штоб после вставки значения в столб INTEGER Рост, если Рост меньше 180 - в столб BOOLEAN Карлан-унтерменш записывалось True."
923489
#137 #923454
>>923390
Спасибо! Но мне интересно как это в контексте андроид приложения описывается. Есть какие-то примерчики?
923472923486923491
#138 #923472
>>923454
Есть. Который ты напишешь и над которым поколдуешь сам.
Тут вроде как нет отличий в применении от других SQL запросов в андроиде. А на практике такие вещи лучше усваиваются, после череды выстрелов в ногу.
#139 #923486
>>923454
То есть, ты же любой пример по SQL в андроиде можешь взять, если не знаешь, как работать в нем с запросами. Зачем искать пример по каждому элементу запроса именно на андроиде, которых всегда будет недостаток, чем менее попсова нужда?

View и trigger это же уже из области проектирования структуры твоей бд под твои нужды, что от андроида зависит чуть менее, чем никак.
#140 #923489
>>923448
Хочу чтобы после операции добавления проверялось количество записей по предикату и если оно превышает определенный размер - шло рекурсивное удаление записей по другому предикату, до тех пор пока общее число не станет равным капу
923509923595
#141 #923491
>>923454
SQLiteDatabase.executeSQL(%вот сюда пихаешь свой ништяк%);
923610
#142 #923509
>>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 - это обычный такой подзапрос. То есть, он строится может без оглядки на внешний блок.
То есть, нужно вычленить из

>Хочу чтобы после операции добавления проверялось количество записей по предикату и если оно превышает определенный размер - шло рекурсивное удаление записей по другому предикату, до тех пор пока общее число не станет равным капу


"Хочу чтобы проверялось количество записей по предикату и если оно превышает определенный размер - шло рекурсивное удаление записей по другому предикату, до тех пор пока общее число не станет равным капу"
И на этом строить запрос, словно никакого триггера нет. Как бы ты строил без него. Потом обернуть синтаксисом тригера.
923517
#143 #923517
>>923509
Бойлерплейт ==> в пизду, в рот ебал каждый запрос на дцать строк ужирнять
923587
#144 #923587
>>923517
Ну так не нцать должно выйти. Я сейчас поэкспериментировал и уменя получилось что-то вроде такого.

CREATE TRIGGER IF NOT EXISTS myTrigger
AFTER INSERT ON MyTable
WHEN ((SELECT COUNT(*) FROM MyTable) > 5)
BEGIN
...DELETE FROM MyTable;
END;

В итоге после превышения 5 записей в бд - все удаляется. Но можно заменить на удаление с условием, например.
923588
#145 #923588
>>923587
Но я хз, что делать, если даже после всех удалений строк по условию останется больше строк в итоге, чем нужно.
Разве что по id или timestamp самые старые чистить, например.
923723
#146 #923595
>>923489
Мне аж интересно стало, по какому критерию будешь удалять записи, чтобы их гарантированно стало определенное число?
Мне никакой вариант без сортировки в голову не приходит.
923724
#147 #923610
>>923491
Вот! Спасибо! Это то что я спрашивал как раз.
#148 #923723
>>923588
for each row с условием достаточно
#149 #923724
>>923595
MIN(datetime(...))
923726
#150 #923726
>>923724
причем с LIMIT 1 на случай одинаковых до мс штампиков
#151 #923733
>>923436
Я говорю плохо в цепочке выкидывать какие-то левые исключения. А если обернуть в монадку то ты в onNext возьмешь и обработаешь верный результат одним макаром, ожидаемые ошибки (файл не найден) другим, а фатальные ошибки третьим способом, onError предназначен для фатальных ошибок.
923736
#152 #923736
>>923436
>>923733
То есть для того же retrofit'a можно использовать и Observable<Response<?>> и Observable<Result<?>>, зависит от того где ты хочешь рбрабатывать IOException и HttpException
#153 #923739
>>919538 (OP)
Поясните, не лучше ли для простых приложений
юзать веб-морду (на хтмл5+ксс) вместо
интрефейса на джаве?
Сервер на питоне.
923740923749
#154 #923740
>>923739
Если тебе наплевать на качество, то да, лучше.
#155 #923749
>>923739

>Сервер на питоне.


Хорошее приложение от этого (серверного языка) не зависит от слова никак.
923771
#156 #923771
>>923749
Не скажи, при плохой серверной части от приложения требуется заметная оптимизация по запросам и политике обновления данных
924327
#157 #924141
>>919538 (OP)
С Robolectric возможно тестировать recyclerview? Надо протестить scrollListener, че то он вообще не вызывается, хотя в адаптер recyclerview кладу данные и двигаю layoutmanager к концу
924618
49 Кб, 500x500
#158 #924222
>>919538 (OP)
Сап, андроидач.
Есть одно клиент-серверное приложение. Веб-сервис на пхп, и два клиента - сайт и приложение. Авторизация происходит на клиентах через гугл.

ВНИМАНИЕ ВОПРОС
Сейчас пилю платную версию приложения, в которой будут доступны некоторые фичи. Необходимо на веб-сервисе запилить проверку что пользователь купил приложение. Api для этого не нашёл.
Какие варианты?
924255924310924311
#159 #924255
>>924222
Проверять по логину? Раз все равно авторизация.
#162 #924313
>>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.

924314924329
#163 #924314
>>924313
В итоге твое приложение декомпилируют на следующий день, и каждый васян будет дрочить твой сервер нахаляву. А если там еще сторонние платные api используются при этом, типа гуглопереводчика - то это ж пиздец, доверять такое гугломартыханам ебучим.
#164 #924327
>>923771
Плохо можно написать на любом язык/фреймворка.
#165 #924329
>>924313
Это же типа для подписи. Приложение посылает запрос гуглу чекнуть привелегии текущего пользователя. Гугл присылает ответ. Без подписей какой нибудь васян может спокойно подменить ответ гугла своим (в том числе вообще и не пропустить запрос к гуглу). А так ответ подписан дохуя сикретным ключом гугла - и васян его подменить уже не может. А ключ в исходниках это открытый ключ - то что его достанут нихуя не даст. Если конечно у васяна не завалялся квантовый компьютер.
924447924524
#166 #924447
>>924329
Тот же лаки патчер просто подделывает результат проверки.
#167 #924524
>>924329
А что мешает провести тривиальный реверсинжиниринг и тупо убрать эту проверку?
#168 #924618
>>924141
закинь код на pastebin, гляну
#169 #924638
Аноны, кто-то работал с DBFlow? Есть один вопрос по one-to-many.
#170 #924845
Котаны, подскажите либу с ручками-крутилками или бесконечный seekbar, который можно крутить и крутить.
#171 #924856
Гугл не пустил в маркет, ссылаясь на unauthorized use of copyrighted content in your promotional screenshots.
В этих самых скриншотах только постеры фильмов и фотографии актеров, получается, дело в них.
При этом тысячи приложений используют их подобным образом, и они явно не получали для этого никаких дополнительный разрешений. Как выйти из ситуации?
924861
#172 #924861
>>924856
То, что дозволено барину, не дозволено холопу. Смирись.
#173 #924868
Поясните нюфагу:
где-то читал, что при оверрайдинге методов всегда надо вызывать super.*
Хочу в коде оверрайднуть onBackPressed();
но если я вызываю super.onBackPressed() то весь последующий код не работает, если я его не вызываю то все работает как надо.
Вопрос: есть ли в моем случае подводные камни?
924886924943924963
#174 #924886
>>924868
Уверен, что не вызывается? Добавь после вызова super строчку с логом. Например
Log.d("MAAAM LOGI!!", "NU RABOTAET JE!")

Потом запусти приложение через debug и ищи строчку.
924969
#175 #924943
>>924868

> где-то читал, что при оверрайдинге методов всегда надо вызывать super.*


Тебя наебали. Зависит от метода. В случае onBackPressed(); от конретной ситуации зависит.
924969
#176 #924963
>>924868
Если я правильно понял сорцы - активити уничтожается при вызове onBackPressed(). То есть, ты вызываешь дефолтную имплементацию, а активити сдыхает раньше, чем ты пытаешься что-то сделать.
924965924969924987
#178 #924969
>>924963
Да, видимо так.

>>924943
>>924886
У меня интент возвращает значение, а потом я вручную финишу её, мб лучше вместо финиша вызвать супер? Или супер сам тем же финишем пользуется?
925045925052
#179 #924987
>>924963
Что за бред? Подыхает активити или нет (я уверен, в родительском коде просто вызывается finish или что-то похожее происходит), код не может не исполняться после вызова метода родителя, если не бросается какое-то исключение.
Посиди с отладчиком или логгером, разберись, почему твой код не работает, а не делай такие безумные выводы.
925041
#180 #925041
>>924987
Но чтобы послать intent через LocalBroadcastManager, нужна передать ему контекст.
Что там происходит, когда активити убито? Контекст чего передается и какой вообще?
925158
#181 #925045
>>924969
Можно скопировать дефолтную реализацию, и вставить то что ты хочешь перед finishAfterTransition();

Дефолтную посмотри в сорцах выше.
925046
#182 #925046
>>925045
Благодарю.
#183 #925052
>>924969
Хотя, можно и сначала слать intent, потом вызывать super. Это же не конструтор, где это должна быть обязательно первая линия.
#184 #925095
Является ли нормальной практикой класть в общий для всего приложения класс application какие-то долговременные результаты типа обработанных данных, которые потом можно вставить в разные activity или виджеты?
925117
#185 #925117
>>925095
Нужен отдельный класс для хранения. Или вообще контент провайдер. На и на память смотреть нужно. Если данные легко получить заново, то лучше их не хранить (если они памяти много занимают). Или там настроить освобождение памяти в onLowMemory. Но в общем идея хорошая.
925133
#186 #925133
>>925117
Все бы ничего, но виджет не только отображает данные, но и позволяет минимум манипуляций с ними. Пока он есть, сабкласс application может быть прибит? Я читал, что они находятся в одном процессе же.

А то выйдет, что виджет, допустим, текст отображает, а самой переменной нигде уже нет, application прибит.

Ну, грубо говоря, например виджет показывает число 5, и при нажатии на кнопку число должно возводиться в квадрат.

Вот если бы во время существования виджета у него был свой свой экземпляр класса в памяти, в котором можно было это число хранить - проблемы бы не было, наверное, но его нет, и за обновление отвечает AppWidgetProvider, который долго не живет.

Как вот сохранить это самое 5, чтобы передать его службе или activity при нажатии где-то на виджете? В файлике каждый раз при обновлении виджета записывать значение, может?

Либо я вообще зря себе мозг ябу и при смерти application виджет тоже схопнется?
925140
#187 #925140
>>925133
Просто я наткнулся вот на это
http://www.developerphil.com/dont-store-data-in-the-application-object/
И если это правда, то там нельзя хранить что-то помимо констант, выходит, потому что в середине работы все кроме них может пропасть.
925154
#188 #925154
>>925140
Хм, можно же поля в application задавать через setter, а в нем дублировать в файл.
Если application и перезапустится - то данные восстановятся через указание в onCreate() ручками. Так что не так уж тщетно бытие, видимо.
#189 #925157
И все же, если виджеты и application работают в одном процессе - почему мы используем remote views и pending intent? Сдается мне, что тут что-то не так.
К тому же виджет рендерится отдельно хостом, не? При смерти application по-умолчанию не должны же с ним какие-то изменения происходить, не?
925159
#190 #925158
>>925041
Контекст активити. В момент закрытия, активити жива. И остается жива долгое время, как минимум до окончания вызова onDestroy.
Далее уже точно не знаю, надёжнее всего считать, что активити не существует. Хотя наверняка можно будет ещё контекстом пользоваться.
#191 #925159
>>925157

> И все же, если виджеты и application работают в одном процессе - почему мы используем remote views и pending intent? Сдается мне, что тут что-то не так.


Не работаем в одном процессе. В твоём процессе есть только бродкаст ресивер, который получает события для манипуляции с виджетом.
925161
#192 #925161
>>925159
Хм. Так я и думал, что бы там на stackoverflow не писали.
В общем, контент виджета и активити никак не выйдет гарантированно держать синхронизированным без файла, выходит.
925167
#193 #925167
>>925161
Выйдет. Просто надо виджет прямо в активити обновлять, когда нужно. Ты волен это делать где угодно и когда угодно.
925170
#194 #925169
Допустим, приложение раз в час создает новый контент и создает notification о поступлении.

Так ли критично, чтобы пользователь при нажатии попал именно в activity с инфой из уведомления?

Могут ли подорваться до 1чек чьи-то жопы, если, допустим, уведомление висит нетронутым, пользователь получает все новую и новую инфу в самом приложении, потом жмет на уведомление и... Попадает на то же самое место, на котором остановился, а не на то, которое в уведомлении?

Является ли обратное удобной фичей, или же пустым пердолевом для аутистов?
925215
#195 #925170
>>925167
Не, тогда он станет полностью бессмысленным. У него должна быть некоторая самостоятельность, а не просто плашка с отображением.
#196 #925215
>>925169
Зависит от задач которые ты ставишь перед интерфейсом. Если, к примеру, ты хочешь чтобы он был "удобным" то одна из целей - минимизировать количество действий пользователя. Тоесть тебе нужно прикинуть возможные сценарии действий пользователя которые он захочет совершить после получения уведомлений и при нажатии пользователь должен попадать на активити которая позволит ему совершать минимум действий (в среднем). Если, к примеру, ты хочешь максимизировать показ рекламы - то после нажатия пользователь должен попадать на рекламу. Ну и так далее.
925343
#197 #925343
>>925215
Вот от рекламы точно будут 1-чки
#198 #926155
Java-тред удалён. Даже моча понимает, что Java не нужна, потому что есть Kotlin
926257
#199 #926257
>>926155
Не нужен.

Scala-бог.
926261
#200 #926261
>>926257
Не нужна.

Haskell-властитель-богов
926266
#201 #926266
>>926261
Не, ну так-то да, но под андроид на хаскеле тяжеловато будет.
926297
#202 #926297
>>926266
Вопрос желания извращаться же, как по мне, так можно на простых проектах использовать что нравится (хоть хаскелль, ей богу), а вот большие (больше 6-7 модулей, наверное, и тысяч за 150 строк кода в совокупности без тестов) уже только на java. Ибо на данный момент она банально менее багована и по ней больше доков + больше фичь есть (тот же Unsafe, ога)
#203 #926874
onReceive в AppWidgetProvider реально перепилить на прием кастомных неявных intent'ов? Прописываю в манифесте, проверяю в самом методе - и никакой реакции.
926875
#204 #926875
>>926874
В обсчем, как послать intent в AppWidgetProvider из activity?
#205 #927054
Анон, в качестве практического опыта хочу сделать какую-нибудь приложение под андроид на react native.

Вопрос в том что лучше сделать. Можно и просто что-то на отъебись, можно попробовать интересное.

Думал вот сделать показ анекдотов категории б, но может есть еще какие интересные идеи?
927530
#206 #927084
#207 #927124
>>919538 (OP)
У меня есть сервис(intent), который в фоне синхронизирует локальную бд с апи. И по окончанию этого процесса мне из сервиса нужно дернуть метод фрагмента, который обновит ui. Все что гуглится это какие-то костыли или непонятно что и я уже подумываю не заменить ли сервис на лоадер. Как-то по нормальному это сделать можно?
927126927159
#208 #927126
>>927124
Очевидный bind.
927127
#209 #927127
>>927126
Очень оперативный анон, я в доках прочитал, что "Привязанная служба обычно работает, пока другой компонент приложения привязан к ней"

а мне вроде как надо чтобы сервис отработал до конца в любом случае. Или этот как-то можно обойти?
927161930091
#210 #927159
>>927124
Бросай локальный бродкаст
#211 #927161
>>927127
Бинд может и к уже работающему сервису подключиться, в этом случае анбинд его не остановит. Разберись с сервисами.
#212 #927167
Аноны, дайте тутор по Rx.
927172
#213 #927172
>>927167
В примере из codepath .OnSubscribe горит красным. ЧЯДНТ
#214 #927209
>>919538 (OP)
Сап, делаю простой текстовый квестик на ведройдике. Есть некий общий лейаут (информация об инвентаре, ранах, сломанных костях, порванных артериях етц) переход на который должен быть доступен с любой локации, с возможностью после просмотра инфы с этого лейаута вернуться на тот, с которого я совершал переход. Сначала хотел через setcontentview организовать, но потом подумалось, что просто натянуть новый лейаут сверху, а при выходе удолить будет проще. Только вот чем вот можно сверху его надеть?
927235930090
#215 #927235
>>927209
гугли backstack.
#216 #927530
>>927054
Джентельменский набор:
Todo App, синкающийся с календарем
Трекинг расходов/доходов, с синхронизацией через гугл драйв например
Погодное приложение
#217 #927620
Надо сделать клас-обьект для бд. Одно из полей - icon, который в базе будет сохранятся в blob формате. Какой тип использовать для icon?
927629927880
#218 #927629
>>927620
byte[], по крайней мере это то что можно достать их курсора, а так-то тебе наверное битмапка нужна. Но идея не очень.
#219 #927702
Безопасно ли прикреплять к notification какой-то intent с рабочим объектом с данными?
С одной стороны, intent явный же, с другой - он летает между приложениями, он совсем не локальный.

Можно ли его спиздить и узнать кусочек внутренней реализации?
930089
#220 #927880
>>927620
Не советую хранить картинки в бд. Но самое главное, не храни их в контент провайдере.
#221 #928127
Есть сервис (расширяет Service), который стартуеся по интенту и начинает аплоад файла по апи, загрузка с помощью rx на io, по выполнению возвращается в мейн тред и кидает бродкаст с одним экшоном и результатом если все ок и с другим экшоном если вылетел эксепшн, ловлю ресивером во фрагменте. Ресивер регается в onResume и убирается в onPause. Проблема в том что бродкасты об ошибках до фрагмента доходят, а вот саксес - нет. Пробовал и локальные ресиверы и глобальные, даже в манифесте регал, до него тоже не доходит успешный интент. В чем соль?
928137928357
#222 #928137
>>928127
Вопрос снят, хуй знает в чем проблема, переделал цепочку, теперь бродкаст шлется, но непонятно почему если до onNext доходит в обоих случаях, бродкаст шлется только в одном, мда.
928357
#223 #928226
Репостну сюда, раз уж пилится мое говно все равно под ведро.
>>928197
928326
#224 #928326
>>928226
юзай ретрофит, а там уж как с кукисами работать легко гуглится
928342
#225 #928342
>>928326
Мне кажется, проблема не с куками а с самим запросом, потому что возвращается не страница "ошибка логина" или "логин успешен", а главная. Видимо, с передачей параметров в POST загвоздка.
Но за ссылку спасибо, посмотрю.
#226 #928357
>>928137
>>928127
дело было в том, что я использовал setData, а там бывали uri file:// или content:// вот их видать и не пускало, чудно.
#227 #928365
аноны как сделать нормально спиннер? обычным способом или можно как то с recyclerview?
928369930088
#228 #928369
>>928365
По моему опыту спиннер не самым очевидным способом готовится. Чем тебе не подходит существующее апи?
#229 #928388
Что скажете про долгосрочные курсы Гик Брейнс ? Заинтересовался Мобильной разработкой
https://geekbrains.ru/professions/mobile_developer
звучит красиво и цена неплохая, каково обоснованное мнение Анона?
928420928429
#230 #928420
>>928388
если есть опыт в программировании то не стоит, сам во всем разберешься. Ежили нет, то зависит от упорства, желания или денег. Если есть первые 2 качества, то таки сам до всего дойдешь не потратив ни копейки, но если деньги не проблема - пройди курсы, промотивируй себя тем что заплатил
#231 #928429
>>928388
Никогда не связывайтесь с этой конторами и прочими курсами от Васяна.
Годные курсы могут быть лишь у хороших университетов (курсера, едх, степик) и у технологических компаниях уровня Яндекса, JetBrains.
И всегда они бесплатные.

На курсах от Васяна вы будете слушать пересказ официальный документации и решать хеллоуворды из книг серии "ххх for doomies", получите меньше навыков и опыта, чем если бы потратили неделю на самообразование, и сертификат, которым можете подтереться.
#232 #928494
>>919538 (OP)
юзаю андроид студию
так получчилось, что нужно использовать именно встроенный эмуль. пишет:
waiting to target device to come online
хотя эмуль запущенный, летает, запускается тоже быстро, анончик, как лечить?
930087
#233 #928805
Посаны, не знаю где такое спросить. Есть android устройство на arm процессоре, есть разные ядра (версии 3.10) от васянов к этому устройству. Я хочу подключать wacom планшет через usb-otg. Планшет видно в dmesg, лампочки на нем горят, но ничего не работает. Стоит ли пердолиться и пробовать собрать ядро с вакомовскими модулями или это дохлый номер? Впустую тратить время не охото.
#234 #930087
>>928494
Поясни, у тебя девайс запускается и нормально функционирует, но студия не видит этого и ждет, или же эмаль висит в загрузке ?
930622
#235 #930088
>>928365
Хватит мозгов и выдержки - сделай свой кастом на базе ReyclerView, не хватит - юзай офф доки по спиннеру
#236 #930089
>>927702
Можно, методом тыка все можно
#237 #930090
>>927209
startActivityForResult ? Ну, если есть какие-то манипуляции с инвентарем, то вполне уместно выглядит
#238 #930091
>>927127
Можно через IPC callback передавать, а сервис сделать started и вручную убивать по окончанию загрузки
#239 #930092
Народ, а вообще с приходом чистого MVP, RxJava, Retrofit и прочего, помимо специфических юз-кейсов, используются ли Service-ы, BroadcastReceiver-ы и прочее ? Просто, как по мне, ведь все в рамках приложения спокойно реализуется без них, и, более того, данные компоненты лишь ухудшают читабельность кода, из-за обязательной привязки к контексту, следовательно, загрязняя активность/фрагмент.
930204
#240 #930204
>>930092
Если можешь реализовать без них, то так и делай. Но как ты будешь например отправлять или получать данные в фоне (с закрытым приложением) без сервисов? никак
#241 #930231
Как вызвать метод public void onButtonStopClick(View view) реагирует на нажатие кнопки в другом методе. Не знаю какой что передать в параметр "View view"
59 Кб, 877x624
#242 #930263
Анон, помню в одном из тредов скинули тестовое задание для джунов.
А именно, требовалось создать приложение, которое берет данные с сайта вроде weather.com и отображает их.
У кого-нибудь сохранилась ссылка на это тестовое задание?
Где можно найти актуальное тестовое задание Российских компаний?
930264
149 Кб, 873x762
150 Кб, 775x740
#243 #930264
>>930263
Лучше, сохранился рисунок.
930275931211
101 Кб, 400x400
#244 #930275
>>930264
Люблю тебя, анон! Пусть всё у тебя будет хорошо.
А ты сам работаешь, или вкатываешься?
930278
#245 #930278
>>930275
Вкатился на работу недавно, постоянно задаю тут глупые вопросы. Иногда отвечают
930283
165 Кб, 1280x960
#246 #930283
>>930278
Можно я тебя поспрашиваю?
А какой лвл, если не секрет? Живешь в ДС?
Как вкатывался, что именно делал для вкатывания? Смотрели ли твой гитхаб?
930301
#247 #930301
>>930283
20 лвл, живу в украине, львов.
Вакансий на трейнии мало, ходил только на одно собеседование, обычно всем нужны джуны с 1+ годом опыта. Потом один знакомый написал что ему нужны андроид пацаны и дал контакты чувака, который меня на работу и взял. Этот чувак собирается свою фирму открывать, спрашивал не сильно, в основном какую-то глобальную теорию типа: "как тянул инфу с сервера, как работают джсон обьекты, генерализацию джава", потом я показал свой курсач, там были sqlite и ретрофит, потом кинул гитхаб, на который по его просьбе закинул этот курсач и лабы, которые писал на андроиде в универе, штук 5-6 их было.
Пока что работаю дома, пилим апки для рекламы фирмы.

>что именно делал для вкатывания


ну вот курсач и лабы помогли, так то они говорили, что хотели тестовое задание дать, но т.к. у меня уже было свое говно, то не дали.
930366
#248 #930366
>>930301
Понятно. Львов охуенный город, кстати.
#249 #930622
>>930087
загрузился, но андроидстудио ждет пока загрузится. пишет типо вейт фо онлайн
#250 #930869
Решил разрешить пересоздание activity при повороте экрана. В результате одна принципиально важная view, размеры которой match_parent, имеет размеры 0x0. Не знаю как сформулировать вопрос гуглу, так что спрашиваю об этом здесь
Есть цикл, который ждет пока размеры не станут нормальными, и пробует их раз в 10мс. Он ждет вечно
Почему такая херня?
931019931026
#251 #930947
Проясните за Rx. Как привязать Observable например к ArrayList? Гуглю туторы - но они вроде устарели - так как на новых версиях либы много чего горит красным. ЧЯДНТ?
931026
#252 #931019
>>930869

> Есть цикл, который ждет пока размеры не станут нормальными, и пробует их раз в 10мс.


Пиздец у тебя говнокод.
#253 #931026
>>930947

> ЧЯДНТ


Используешь rx2
>>930869

> Есть цикл, который ждет пока размеры не станут нормальными


view.post { view в лэйауте и имеет размер }
Не говоря уже о том, что ты и сам можешь вызвать view.measure
931041
#254 #931041
>>931026
Прояснилось за rx2
#255 #931211
>>930264
Сука, у меня пригорает, это разве задание для джуна??
931213931220
#256 #931213
>>931211
Слишком простое?
931250
#257 #931220
>>931211
Мне тут на днях прислали задание на трейнии, надо сделать десктопоне говно, которое режет фотку на пазлы, сейвит N фоток в папке, а потом другой алгоритм это все собирает. Чтобы первый и второй алгоритмы не были связаны и ничего друг о друге не знали.
931250
#258 #931250
>>931213
тянет на середнячкового миддла, но на джуна.
>>931220
а третий алгоритм в отдельном потоке должен пройти тест тьюринга
931267931271932417
#259 #931267
>>931250

>>тянет на середнячкового миддла


лол, ты что поехавший?
#260 #931270
Аноны, вот вам дают дезинг в psd, но без всяких размерностей в dp, как вы верстаете это?
931281931474
#261 #931271
>>931250

> тянет на середнячкового миддла, но на джуна.


Шутишь что ли? На джуна в самый раз. Мне подобные давали как тестовые задания. Если ты нормально андроид знаешь, а именно основы и пару либ, то ты это за 2-4 дня сделаешь.
#262 #931281
>>931270
Хуевые макеты, не признаю ничего кроме sketch.
Берешь фотошоп дроченый, открываешь эту хуйню и смотришь размеры. Дизайнер же по гайдам верстал? Если да, то почти без проблем можешь считать что 1px на макете = 1dp.
931315
#263 #931288
Facebook проталкивает React Native.
Один код на двух платформах, вездесущий Javascript,еще один конкурент нативной Jave.
Нам пиздец?
931289
#264 #931289
>>931288
тебе - да
931290
#265 #931290
>>931289
Зачем бизнесу тратиться на java и swift макак, если можно купить одну javascript макаку? Результат будет один и тот же практически.
React native выйдет из преальфы, релиз за релизом.
#267 #931294
Live reload, один код на двух платформах, падение производительности по сравнению с нативом незаметны.
Киллер фичи.
Не убьет нативные языки, так потеснит
#268 #931315
>>931281
Скеч тоже говно. Проприетарное, только для мака.
931319
#269 #931319
>>931315
Ну охуеть теперь, швабодка жму пинус? Для винды есть пару программ позволящию просматривать макеты в скетче + zeplin.
931372931373
#270 #931372
>>931319
В том то и дело, что ни одной программы, которая нормально показывает его файлы нет. Так что дизайнер должен юзать общепринятый в отрасли psd или идти нахуй.
931391931517
#271 #931373
>>931319
Вернее, он должен уметь не только предоставить макет, но и нарезать в соответствии с разными плотностями экрана, состояниями и так далее.
931515
#272 #931391
>>931372

> Так что дизайнер должен юзать общепринятый в отрасли psd


А ты psd будешь в гимпе открывать, швабодный?
#273 #931474
Реквестирую какой-нибудь гайд по TDD. Прошёл раздел про тесты на вогелле, но нихуя не понял. Желательно какой-нибудь гайд, где мы последовательно разрабатываем какую-нибудь приложеньку по TDD.
>>931270
На глазок. А цвета пипеткой замеряю.
#274 #931515
>>931373
Нормальный дизайнер сам тебе все нарежет, существует куча плагинов экспортирующих асеты под ведро/гейось/уеб/десктоп. Все это закинет в папочку и пришлет тебе вместе с макетом.
#275 #931517
>>931372
Zeplin нормально показывает, даже позволяет доставать асеты. Но все это только если дизайнер не мудак и все правильно разметил.
#276 #932260
Подкиньте пример или идею, как прикрутить к GridView матрицу (многомерный массив)?
Все что нахожу - одноклеточное говно, работающее на одной последовательности.
А где есть матрицы - они сливаются в один лист и хуй знает как вообще потом определять строки\столбцы при нажатии.

В других графических фреймворках почему-то grid'ы с православными строками\столбцами, и только в ебаном ведре хуярят через сплошной лист.
932267932901
#277 #932267
>>932260
Что у тебя конкретно не получается? btw GridView устарел. Ты же знаешь что матрицы тоже обычно хранятся линейно.
932277
#278 #932277
>>932267
А что есть на замену ему?

Допустим, есть матрица

[[object1, object2, object3, object4, object5]
[object6, object7, object8, object9, object10]
[object11, object12, object13, object14, object15]]

Заполнить сетку-то их вьюхами просто, слив матрицу в одномерный массив. Но как при нажатии вычислить позицию в сетке, если в адаптере используется только одно число position?

Мне это нужно, чтобы оперировать самой матрицей. Например, поменять несколько объектов местами. Передвинуть выше, например. Я же не могу сделать это в одномерном массиве.
932278932294
#279 #932278
>>932277
Или можно хранить позицию элемента в матрице в самих объектах?
932294
#280 #932294
>>932278
>>932277
Сделай класс матрицы который инкапсулирует доступы/смены элементов. Типа такого: http://pastebin.com/MecHx61p
Вообще сейчас норм использовать RecyclerView, и что бы получить грид - GridLayoutManager
932295932296
#281 #932295
>>932294
А забыл, там же в адаптере только одна позиция, ну можно добавить метод:
public final T getRaw(int position) {
____return data[position];
}
#282 #932296
>>932294
Та сама логика у меня уже готова отдельно. Я с представлением больше мучаюсь, чем с ней. На каком-нибудь GTK или QT уже сделал бы и забыл.
932304
#283 #932304
>>932296
Задаешь лэйаут менджеру ширину матрицы как спан каунт и все. А дальше тупо по позиции дергаешь элементы, она тупо слева на право, сверху вниз.
#284 #932356
Подскажите нубу.
Годная книга?
http://www.ozon.ru/context/detail/id/135513511/
#285 #932417
>>931250
Я андроид еще толком даже не нюхал, но судя по описанию - не вижу в задачке ничего сверхъестественного.
#286 #932421
Анон, а можно менять XML файл во время работы программы, например добавить стринг?
932428
#287 #932428
>>932421
Нет. Они лежат в только читаемой области, с рутом можно делать все что хочешь, плохая идея.
7 Кб, 275x183
#288 #932475
Вот учу я андроид и чем дальше тем больше узнаю о всяких мелких нюансах и подводных камнях. Сейчас читаю "The Busy Coder's Guide to Android Development", так там в одной главе про ресурс сеты и конфигурации черт ногу сломает во всех возможных сценариях. При этом сам автор говорит, что несколько лет кодил и о некоторых имел ошибочное мнение все это время.
Я не пойму почему вкатывальщикам советуют андроид, мол легче чем в энтерпрайз? При том что тут надо сначала знать джаву нормально, что бы не обсираться, а потом еще и знать андроид фреймворк со всеми его правилами.
932480
#289 #932480
>>932475

>фреймворк


Платформу + фреймворки.
#290 #932558
Всем привет, хочу написать свой вьюпэйжер, который динамически подгружает при свайпе влево право, предыдущую страницу или следующую на основе фрагментов. Кто подскажет как свой компонент сделать? Искал в оф доке, там про создание компонентов хуй да нихуя, как вообще работает отображение компонента?
932737
#291 #932737
>>932558
Нахуй тебе свой? Всё, что ты описал реализается стандартными средствами. К тому же, это не функции ViewPager'а, а его адаптера.

Если всё же нужен свой, то открывай исходники и смотри, делай похоже.
932880
#292 #932795
Как отобразить один виджет над другим?
Например, что-то над фоном.
Я знаю, что можно сделать один parent'ом, но как быть, если они оба child другого parenta?
Как внутри parent'a регулируется, какой виджет перекрывает другой?
932804
#293 #932804
>>932795
Отрисовывается все по очереди заданной индексом в родителе. Меньше - раньше.
#294 #932847
Почему у GridView есть метод setColumnWidth, но нет метода setColumnHeight?
Я понимаю, что можно другим способом программно задать, но все же.
932850
#295 #932850
>>932847

> setColumnHeight?


У row посмотри.
#296 #932880
>>932737
Значит я не понимаю как это сделать в адаптере,
Начальное состояние вьюпейжера мне нужно такое даны три фрагмента, активити открывается на втором фрагменте. Далее после свайпа, например вправо, текущий фрагмент становится третий, теперь мы должны удалить первый фрагмент и добавить 4й, так чтобы количество фрагментов осталось 3 и по прежднему текущий фрагмент был вторым.
Мне нужно поставить обработчик на onchangepage метод onpagechaged и в нем пересоздать адаптер с новым содержимым?

Или нужно как то в адаптере перезаписать метод initializeItem и в нем удалять ненужный фрейм и добавлять новый? Или новый список с фреймами пересоздавать на это событие и выставлять текущую снова вторую.

Вообщем не понимаю как сделать так чтобы оставалась позиция страницы всегда вторая.
933965
#297 #932900
Повторю вопрос из ньюфаг треда, так как тут больше java-анонов.

Посоны, кто-нибудь проходил курс Java rush? Стоит он затраченного времени? Потому что я вот на втором уровне и меня как-то настораживают многократно повторяющиеся задачи типа "выведи петросянские смехуечки на экран".
932904932952933086
sage #299 #932904
>>932900
Тебе в java-тред.
#300 #932952
>>932900
Нет, лучше мне деньги отдай.
933094
#301 #932972
Аноны поясните за констрейнтлейаут. Годная штука или хуйпизда?
932978
#302 #932978
>>932972
Годная, но сырая.
#303 #932989
Как вычислить размер вложенного один в другой layout'a, если у вложенного есть отступ от краев?

Пытаюсь взять размер экрана, взять размер отступов (перевести их в пиксели), отнять отступ * 2 от размера экрана - и чет нихуя не сходится в итоге. Куска в пол миллиметра не хватает.
932993933002
#304 #932993
>>932989
У обоих стоит match_parent.
Более менее сходится, если отступы умножить на 5, но это пиздец какая-то магия.
933002
#305 #933002
>>932989
>>932993
А чем тебе getWidth не угодил? Ну кроме того что его имеет смысл брать только после полного лэйаута и возвращает он в пикселях.
933011
#306 #933011
>>933002
Я из onCreate вызывают, а он выдает 0 там.
933018
#307 #933018
>>933011
Ну потому что ничего еще не вымерено. Засунь его в колбек на глоабльный лейаут, так будет правильней.
933072
#308 #933047
Где и как вы храните реквест коды, что бы все было ништяково и не совпадало со всякими пейсбуками, вкашками и прочими гугл сервисами? Ну и что бы собственные между собой не пересекались естественно
#309 #933072
>>933018
Фокус в том, что мне нужно в GridView динамически подгонять размер ячеек под размер экрана.
Если я засуну определение ширины в Runnable, это же все равно случится после того, как адаптер распихает все в GridView, не? Мне вот надо как-то в момент впихивания первого элемента успеть получить значение.
933082933088
#310 #933082
>>933072
Ммм, а если адаптер регистрировать как раз в Runnable, который впихнуть в post?
#311 #933086
>>932900
На 16 уровне сейчас. Довольно годно, если вообще 0 в программировании. Задрочка кода там повсеместно, но зато действенно. Для того чтоб вкатится в андройд достаточно 10 бесплатных уровней. Так что можешь не покупать подписку.
933094
#312 #933088
>>933072
Почему бы тебе не посчитать размер до прицепливания адаптера? Получаешь размер доступной области для своего грида, вычитаешь место для отступов между объектами, или как ты там себе думаешь, и потом задаешь эти параметры адаптеру, который будет знать какого размера вьюхи делать.
Есть другой способ, не требующий специфических действий извне. Берешь percent relative/frame layout, используешь его как корень вьюхи итема, ширину итемы всегда будут получать одинаковую, а ты просто задаешь нужный тебе аспект рэтио.
933098
#313 #933094
>>932952
За что тебе деньги отдавать?

>>933086
Спасибо, а то я боялся что там все бесплатные уровни будут на уровне хэлло ворлдов. Я уже пару лет пишу под android, но есть определенные пробелы в знаниях по Java, вот решил этот курс попробовать.
933097933101
#314 #933097
>>933094
ну ты же хочешь положить деньги кому-то в карман за то что можно получить бесплатно? Чем я хуже, со мной хоть времени терять не будешь на смехуечки.
#315 #933098
>>933088
А у грида тоже match_parent. И у всех его родителей.
Я пытался считать через
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

там высчитывал параметры ячейки и передавал адаптеру. Вот только размер грида не совпадал с тем, который можно получить потом в getWidth. Хотя, считал по формуле.

Да и я уже наконец-то сделал, что нужно через задание адаптера в post.
933103
#316 #933101
>>933094

>Я уже пару лет пишу под android, но есть определенные пробелы в знаниях по Java


Как же ты это пишешь? Как чучело из изумрудного города?
#317 #933103
>>933098
Зачем задавать размер грида, ладно ебись как хочешь, дело твое.
933109
#318 #933109
>>933103
Я и не задавал.
Я делал так.
Допустим, экран 1000 пикселей. По бокам от gridView по отступу в 10dp. Перевожу их по формуле в пиксели, получается допустим 100 пикселей на отступ.
1000 - 100*2 = 800. Но атятя, не сходится почему-то.
933127
#319 #933117
Анон есть 3 активити.
Активити 1 передает через интент значение в 2, 2 просто запускает активити 3, 3 делает запись в бд и возвращает на 1 активити, как сделать так, чтобы с 3 вернуться сразу на 1, не открывая 2?
933124933127
#320 #933124
>>933117
FLAG_ACTIVITY_CLEAR_TOP
?
933128
#321 #933127
>>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()).
933128
#322 #933128
>>933124
>>933127
Благодарю
#323 #933145
Котаны, вот к примеру вайбер, окно с чатом. Там же нихуя не списочек? Там ScrollView на которое накидали кучу отдельных вью с сообщениями?
933154
#324 #933150
http://stackoverflow.com/questions/2139134/how-to-send-an-object-from-one-android-activity-to-another-using-intents

Анон, обьясни, пожалуйста.
Я должен написать конструктор, (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];
}

я все верно понял?
933158
#325 #933154
>>933145
Нет, там список, скорее всего RecyclerView. ScrollView сожрал бы кучу памяти под вьюшки которых нихуя не видно.
#326 #933158
>>933150
Ты должен читать поля в том же порядке в котором записывал, в newArray ты просто должен создать массив своего типа с данным размером, количество полей там не при чем. Это сделано для того что бы избежать рефлексии для создания массивов.
#327 #933361
>>919538 (OP)
Анон, спасай! Нужен код простой программки которая выведет информацию о RAM и HDD памяти телефона.

Если это как-то можно сделать стоковыми средствами Андроид то вообще заебись, но пока ничего не нашел.
933395
#328 #933368
От чего может падать эмулятор? Поворачиваю устройство, он думает-думает... И вылетает, ничего не сказав. Критическая ошибка,пожаловаться разработчикам, все такое.
Задача у меня: сохранить большой объект (лабиринт, который может генериться секунд 40, если большие размеры указать) и не генерить его заново после поворота. Делал через static - падало с размерами 23x23. Сделал с повторной генерацией после поворота - начало падать на 40x40.
Не знаю чего еще сказать
подскажите, кто знает
933371
#329 #933371
>>933368
Проверь на всякую хуйню типа переполнения стека или памяти. Что такое "размеры 23x23"?
933376
#330 #933376
>>933371
23х23 клетки - размеры поля
а где это в студии можно посмотреть?
933380
#331 #933380
>>933376
Внизу где-то, android monitor смотреть. Алгоритм генерации чей? 40 секунд на лабиринт в 500 клеток это не очень.
#332 #933383
О, тут и такие мониторы! Прикольно. Спасибо, посмотрю
не, долго он генерит большие, а такой за секунду.
Алгоритм моего друга-заказчика
#333 #933395
>>933361
бампбамп!
933410
#335 #933411
>>933410
Надеюсь это то что надо, пока качается среда.
Спасибо
933434
#336 #933434
>>933411
Код по ссылкам может не работать или быть с багами или просто ты не догадаешься его правильно испльзовать.
головой кароч подумай чутка. Если думать не хочешь, открывайанус кошелек.
933443
#337 #933443
>>933434
И почем цена скрипта обращающегося к API дроида?
#338 #933607
Анон, хочу вкатиться в андроид. Начал заниматься по startandroid, но это все-таки не то. Хотелось бы найти какую-нибудь нормальную книгу, чтобы получить общую картину, а не обрывки в духе "как сделать xyz?". Что посоветуешь?
933663
#339 #933663
>>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-ом, научись в тестирование.

Дальше, если дойдешь до этого момента, думаю, сам уже поймешь что делать, но если что - обращайся!
#339 #933663
>>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-ом, научись в тестирование.

Дальше, если дойдешь до этого момента, думаю, сам уже поймешь что делать, но если что - обращайся!
933674933737934025
#340 #933674
>>933663
Спасибо, милчеловек!
Вообще, "Философию Java" я освоил еще полгода назад, но до сих пор иногда почитываю. Можно ли с учетом того, что мне не придется ее заново перечитывать и что я уже немного помацал SQLite осилитт все это до начала (конца) лета?
933678933680
#341 #933678
>>933674
У меня ушло чуть меньше двух лет, чтобы выйти на уровень "опишите стек технологий, почитаю доки если че непонятно и скажу вам срок выполнения". Но если у тебя хорошая подготовка (ладно, будем честны, если у тебя есть хоть какая-то подготовка) то до этапа "фреймворки" дойти должен успеть
#342 #933680
>>933674
Даб к слову, я придерживаюсь мнения большинства, философию нужно периодически (раз в три-четыре месяца) перечитывать. Во-первых там треть вопросов с собесов покрывается, во-вторых, ИМХО, приятно читается.
#343 #933730
Можно ли предотвратить открытие активити вызова? Ну то есть у меня в приложении есть видео общение и тут пользователю звонят, я хочу показать диалог/нотификацию мол у вас тут вызов думайте куда отвечать, а не так что бы активити вызова тупо открылось не давая пользователю шанса не выходить из моего приложения. Ковыряю пока TelephonyManager но еще не нашел похожего.
#344 #933737
>>933663
Хороший совет, на самом деле.
Главное, с голым андроидом не переусердствовать, а то он может всё желание отбить.
#345 #933756
Почему если начинать startDrag для Drag'n'Drop в OnClickListener - то DragEvent не срабатывает при пеовом же нажатии? Только при быстром повторном.

Проверял у себя и на примере (в последнем заменил только OnLongClickListener на OnClickListener).
933757933758
#347 #933758
>>933756

>OnClickListener


Причем, нажатие обрабатывается 100%, я проверял в логах.
А вот в OnDragListener эвент прилетает только при повторном.

Как-то связано с тем, что OnClick OnClickListener ничего не возвращает, а OnLongClickListener возвращает boolean?
#348 #933925
Вечер в хату, арестанты. Подскажите, нужно из изображения удалять его фон, например, сфоткана вещь на кровати, нужно оставить вещь а весь задний фон сделать прозрачным. Фон всегда разный так что сравнивать изображение фона с конечным не вариант. Смотрел на opencv, но по яве не нашел никакой инфы, а с плюсами не горю желанием сношаться. Какие варианты подскажете?
933929
#349 #933929
>>933925
OpenCV самый оптимальный вариант на ведре. Вроде ещё tensor Flow должен прикручиваться, но не пробовал
#350 #933959
Помните РИНГТОНЫ на говеных старых мобилодровах?
Что есть сегодян есть для обработки мелодий в вибрации для видра?
933961
#351 #933961
>>933959
Закажи дилдак на али и не парься.
933962
#352 #933962
>>933961
Пидорские советы от пидора.
933963
#353 #933963
>>933962
Ну просто я ещё под iOS разрабатываю.
#354 #933965
>>932880
Пацаны помогите разобраться с viewpagerом и adapterами всякими, чот нимогу раскурить. Смотрел в оф доках как работать с ним и фрагментами. Смотрел на стартдроиде статью. Я чет не догоняю никак как это все утсроено. Паможите!!!
933970
#355 #933970
>>933965
Можно вызвать в нужном тебе месте метод
notifyDataSetChanged(), который уведомит адаптер, что нужно отобразить измененное содержимое.
Все манипуляции производить с данными в последовательности, которую передал адаптеру, потом вызывай notifyDataSetChanged().
Это можно прям из активити делать.
933979
#356 #933979
>>933970
А как изменять индексы страниц у вьюпейжера? можно как то отказаться вообще от позиций вьюх? типа 1 страница поумолчанию только. Но когда свайп случается билдится вторая или предыдущая.
#357 #933993
В андроид студии можно как-то изменить цвет счетчика строк?
Красные слишком выделяются на фоне всего, отвлекают и вообще глаза разъезжаются, я так косоглазым стану.
Отказываться от белой темы и стирания шишки на сотни строк в день не хочу.
933997
#358 #933997
>>933993
Settings - Editor - Colors&Fonts - General - Code - Line Number.
#359 #934025
>>933663
Если я .NET помидор с 6летним стажем, могу ли я не читать философию жабы? Глянул на синтаксис - от шарпа существенно не отличается.
Я так понимаю, что это книга для разного рода вкатывальщиков, которые не имели дело с чистым ООП.
934030
#360 #934030
>>934025
А чо есть грязный ооп? Или какой то другой ооп который типа вкатывальщики учат, а 6летние помидоры знают уже какойто другой ооп?
934038
#361 #934038
>>934030
Ну например тот же C++, который является от части структурным языком в подмножестве C. Т.е. существование функций, которые живут вне класса.
Так же можно упомянуть про всевозможный сахар аля C#, который позволяет обходить ограничения, которые могут возникнуть в Java, решаемые там с помощью использования паттернов те же ивенты и делегаты.
Мультипарадигменный ЯП, который лишь предоставляет ООП как возможную парадигму написания JavaScript

Java - сферический ООП в вакууме. Я считаю, что если ты помидор, знающий паттерны хуяттерны, то читать книжку, которая представляет их как часть философии - нахуй ненужно.
934051
#362 #934051
>>934038
ой камон кто тебе мешает статик методов напилить аля фюнкции си.
934055
#363 #934055
>>934051
При чем тут это? Я имел в виду возможность написания функций вне класса в принципе.
934060
#364 #934060
>>934055
Ладно это все фигня лучше поясни как в андроиде из хмл описания виджетов объекты создаются, и как с тем же вьюпейжером разобраться.
934072
#365 #934072
>>934060

> из хмл описания виджетов объекты создаются


Если тебе нужно описание внутреннего устройства, то я тут тебе не помошник сам вкатываюсь. иначе не спрашивал бы про необходимость изучения жабы по философии. А так из того, что знаю - LayoutInflater все делает.

> и как с тем же вьюпейжером разобраться


в смысле, как сбрасывать вьюпажер при поворотах экрана? Честно говоря, сам не знаю. Чому в гугле не спросишь?
934078
#366 #934078
>>934072
Не, я хочу бесконечный вьюпейжер сделать, где типа у него только три фрагмента. Когда свайпаешь типа все красиво свайпаецо на левый или правый фрагмент, но после окончания свайпа я хочу перегенерить позиции вьюпейжера, чоб было как до использования свайпа. Типа в текущей памяти три фрагмента, текущий, левый и правый они не видны. При свайпе перелистывается например на правый фрагмент. Дальше вот хуй пойми где код писать перестроения всего этого дела. В пэйжер адаптере или в пейжер фрагменте или допиливать вьюпэйжер.

А про инфлейтор хмм что он вообще делает, можешь если не сложно на пальцах как дауну пояснить.
934088
#367 #934086
че то проиграл с их диалога
934089
#368 #934088
>>934078
Т.е. тебе нужен по сути циклический замкнутый переход?
Первая ссылка в гугле
http://stackoverflow.com/questions/12471597/how-can-i-make-viewpager-loop

LayoutInflater.from(%context%).inflate(R.layout.%layout_name%) просто создает View по айдишнику лэйаута. Потом из этой View ты можешь через findViewById доставить всякие конторы, которые ты в этом лэйауте определил. В принципе нихуя сложного.
934097934106
#369 #934089
>>934086
на кожаной флейти поди поиграй, дудочник
#370 #934097
>>934088
Мм, да я это видел, но а б с страницы типа будут по кругу скролится, но типа надо чтоб данные то менялись в них. Для этого завести какую нибудь глобальную переменную, которая взависимости от свайпа +-1 делает и уже от этого в пэйжере контент выводить?

А еще вот пэйжадаптер, он логически отвечает за информацию подаваемую в фрагмент? Тоесть пэйж адаптер знает что третья страница и достает инфу из третьей строки в бд и передает в фрагмент, где тот уже запихивает переданые поля из адаптера в свой фрагментный лэйаут.
#371 #934106
>>934088
Если грубо говоря это похоже на лэйзи лоад чтото, подгружать новые фрагменты, но удалять старые.
934112
#372 #934112
>>934106
Если юзать FragmentPagerAdapter, то так и должно работать, если я не ошибаюсь.
#373 #934141
Обратный вопрос. Как вкатиться в разработку из Android. Есть смарт, но под Android даже нормально блокнотика и SSH клиента не нашел.
Нашел убогий SSH клиент под свободной лицензии и тот даже ключ добавить не дает.
Как поставить какое-то окружение на эту недосистему вообще незнаю. Рута нет. Получить через уязвивость в кит-кат незнаю как.
934294
#374 #934294
>>934141

>вообще незнаю.


>Рута нет


>незнаю как


Ну и иди тогда нахуй если ниче не знаешь.
934305
#375 #934305
>>934294
А ты знаешь, как получить рута? Без всяких китайских троянов. Незнаешь? Так тоже иди нахуй.
934322
#376 #934322
>>934305
Пиздуй в тему своего смарта на 4пда. Мудак поехавший.
934717
#377 #934331
Есть способ вызвать стандартную камеру и получить фотографию, а не настраивать все самостоятельно?
934334
#378 #934334
>>934331
Вы блять хоть чуть-чуть в гугл умеете?
https://developer.android.com/training/camera/photobasics.html
934336
#379 #934336
>>934334
Не работает эта хуйня.
934339
#380 #934339
>>934336
Хуйня это ты, у меня все фотки берутся. Ты же даже не можешь сказать что у тебя не работает, даже никакого кода небось нет.
934342
#381 #934342
>>934339
Да я там просто обосрался, впрочем ничего нового. Не полностью старый код откатил и камера лочилась перед отсылкой интента.
934344
#382 #934344
>>934342
Обтекай
934353
#383 #934353
>>934344
Ебанашка пытается выебнуться тем, что удачно копипастит готовые примеры.
Да ты же утрешься при первой же нестандартной задаче, которую не реализовать стандартными средствами без киянки и мата.
934360
#384 #934360
>>934353
Громкое заявление.
934365
#385 #934365
>>934360
Надеюсь, тогда найдется ЧСВшный хуесос, который встанет и ололокая пустит тебе тугую струю в ебало.
Из-за такого говна вот и не хочется куда-то идти, кроме как на stackoverflow.
934375
#386 #934366
Поставил Xamarin поверх студии. Создаю пустой проект. Запускаю. На эмуляторе черный экран. Даже не запускается операционка. Иногда после завершения пишет, что были проблемы с деплоем, а иногде не пишет. Это на дебаге. На релизе сразу говорит, что проблемы с деплоем. При этом никаких ошибок или ворнингов не выводится. В чем может быть дело? До этого ставил андроид студию и там было всё нормально, но мне нужно на шарпе делать.
934377
#387 #934375
>>934365
Когда я задаю тут вопрос, я не ожидаю на него другого ответа, понизь свои ожидания.
934383
#388 #934377
>>934366
Какие-нибудь логи есть?

https://forums.xamarin.com/discussion/64088/android-emulator-opens-but-project-does-not-deploy-and-start

Как вариант можно попробовать adb.exe прибить, но это уже из области танцев с бубном.
#389 #934383
>>934375
Ясно, латентный мазохист ожидает, что другие оценят его попытки при чинить добро.

Насколько нужно быть ебанутым, чтобы бомбануть от нубасного вопроса, а потом (!) полезть искать ссылку для ответа. А потом еще и выебываться.

Блядь, даже вот не думал, что pr собрал такой гной из профессии. Неудивительно, что здесь так тихо. Безрукие агрессивные ебанашки-копипастеры разгоняют всех адекватов.
934543
#390 #934403
Анон, доставь хороший туториал по bitmap, а то в документации ничего не понятно.
934449
#391 #934449
>>934403
Что тебя конкретно интересует? Не встречал какого-то общего гайда, соскейлить/вырезать/записать это есть.
Вот пара толковых:
Крутой блюр - https://habrahabr.ru/post/215077/
Подрезки/масочки - https://habrahabr.ru/company/badoo/blog/310618/

Короче надо гуглить определенную тему. Опять же многое можно подчерпнуть из исходников glide/picasso, но там больше про менеджмент.
#392 #934492
сап, сообщество! реквестирую хелпы в тривильном вопросе
public class Example {
public static Example get(Context context){
}}
Это именованный конструктор или как?
934496
#393 #934496
>>934492
Example слева от get - это возвращаемый тип. То есть это статический метод, который возвращает экземпляр этого класса.
Метод класса, грубо говоря, а не экземпляра.
934502
#394 #934502
>>934496
метод get, объявленный в классе Example, возвращает экземпляр Example? (Example = Example)
934507
#395 #934507
>>934502
Ну да, может там в методе какая-то хитрожопая инициализация, и дополнительная обработка (что и отличает от простого создания через конструктор) которую не хотят доверять тебе?
934508
#396 #934508
>>934507
Все так, анон. Спасибо тебе!
#397 #934542
Что почитать про оптимизацию? Кроме курса на юдасити не нашел ничего толкового.
934604
#398 #934543
>>934383
Уот ета пичооот, еще небось и рута у тебя нет, маня?
#399 #934604
>>934542
Во-первых она не должна быть преждевременной. А во-вторых - https://www.youtube.com/watch?v=qk5F6Bxqhr4&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE

Ну и вообще надо думать и все будет в норме. Обычных джавовских навыков хватит.
#400 #934671
Необходимо сделать приложение, которое будет по Bluetooth опрашивать устройства и сохранять в файл/отсылать в базу/показывать на экране данные.
В принципе оно сейчас это делает, но Bluetooth создается объектом в MainActivity c соответствующими последствиями. А мне нужно, чтобы соединение не терялось при переходе из одной Activity в другую (и полученные данные обрабатывались по-разному соответственно).
Как грамотно сделать подобное? Что почитать про Bluetooth? Я так понял, нужно мутить Service, в правильном направлении копаю?
934682
#401 #934682
>>934671
Вариант для обрыганов - синглтон/инстанс блютуса в апликешоне.
Вариант для норм пацанов - блютус в сервисе. Возникает два варианта - сервис который ты сам стартуешь и который стопается тобой же, из форграунд нотифкации или аллаха. Вариант второй - байндишся при старте активти и анбайдишся в стопе, если юзер переходит на следующее активити товего приложения то сервис не помрет, в обоих вариантах можно организовать общение через байндер и будет ништяк, ну или бродкастами хуярить.

>что почитать


Доку для начала. Тем более если приложуха уже умеет все что надо из активти то и читать особо ничего не надо, кроме существующего кода.
934698
#402 #934698
>>934682
почему не помрет? если у него 0 биндов, то помрет
934802
#403 #934717
>>934322
Уровень знаний обитателей 4пда недостаточен, что бы ответить на мой вопрос. Похоже здесь тоже.
934720
sage #404 #934720
>>934717
Иди нахуй просто.
934727
#405 #934727
>>934720
Быдло
#406 #934802
>>934698
Сервисы хранятся в дебрях активист менагера, и когда одна активитя стопается и анбайдится сервис подождет старта следующей, а там и байнд есть, ничего не пропадет, проверено музыкальным плеером и вебртисишным аудио/видео чатом. Еще можно форграундную нотификации бахнуть.
934816934870
#407 #934816
>>934802
Вы красивые слова говорите, еще б я понимал чего-то. Завтра буду переводить ваши речи.
#408 #934870
>>934802
И ты это тестил на всех китайских телефонах?
934966
#410 #934966
>>934870
На хуеми, который больше одной залоченой приложухи не держит - норм, на мейзу тоже. А если китайфон не тянет то пусть нахуй идет. Андроид нигде гарантии не дает что все будет круто, но форграундную сервис это как форграундную активитя и грохать ее будут в самом крайнем случае.
#411 #935015
Есть вопрос касательно гитхаба.
Я скачал Git, запилил аккаунт на гитхабе. Делают пуш из Android Studio - коммит отображается как совершенный с аккаунта Git, а не гитхаба. Как исправить? Не вручную же кидать файлы...
935554
#412 #935201
Купил Huawei P9 lite, телефон хороший, но есть одна проблема...
Иногда(весьма часто) не пробрасываются ошибки и ты сидишь, кучу времени пытаешься догадаться, что наебнулось. В гуглах ничего вразумительного не нашел, с другими телефонами таких проблем нет. На нём стоит Android 6. Были у кого-нибудь похожие проблемы?
935377
#413 #935377
>>935201
С мейзу такая хуйня, но крашлитика все ошибки ловит и исправно шлёт.
935408935628
#414 #935387
Constraitlayout в студии так требователен к железу? У меня дикие лаги когда я им пользуюсь, перетащить что то на макете невозможно из за лагов.
А если и получится, то одно неверное движение и все сбрасывается.
935393936058
#415 #935393
>>935387
Он не особо стабилен ведь ещё. У меня вроде нормально работает, без тормозов. Отправь багрепорт, может починят.
#416 #935408
>>935377

> но анальный зонд все ошибки ловит и исправно шлёт.


Мразь
935488
#417 #935488
>>935408
Лол. Какой анальный зонд? Может ты и против гугл аналитики? Пиздос какие шизики бывают.
935570
#418 #935554
>>935015
Червь пидор, в архивах и папачках храни типа Laba1_21072006, Laba1_210720061701, Laba1_21072006_1vasya_edit.rar
А про гит забудь не твое это не лезь туда. Через пару лет когда окончишь школу можеш попробовать но только под надзором взрослых
#419 #935570
>>935488

> Может ты и против гугл аналитики?


Ясно.
#420 #935628
>>935377
Крашлитикс то да, но пользоваться ей для отладки куда запарней, чем созданными, для этого, инструментами, лол.
#421 #935653
Нормально ли хранить различные приватные данные (ключ шифровки бд, ключи api и прочее) в gradle.properties (своем .properties файле) и доставать их оттуда в каком-нибудь ленивом синглтоне в java-коде ?
935744936057
#422 #935744
>>935653

>Нормально


Нет. На клиенте не должно быть ничего "секретного". Может ты и сертификат в assets пихаешь? Ключи апи (гугл хуялитика, вк хуяпи и тд не секретные данные если чо)
935760
#423 #935760
>>935744
Ну, а где тогда хранить то то, что ДОЛЖНО быть на клиенте и ДОЛЖНО быть секретным ?
935763
#424 #935763
>>935760
Конкретней, что ты считаешь секретным? Есть множество замечательных статей, которые поясняют, что как бы ты не изъебывался за сравнительно не долгое время все на твоем клиенте вынюхают и реверснут.

http://stackoverflow.com/questions/14570989/best-practice-for-storing-private-api-keys-in-android
#425 #936057
>>935653
Вся секретная хуйня если она действительно секретная должна быть только на серваке.
936199936344
#426 #936058
>>935387
Что у тебя за компьютер, лол?

Сижу с fx8300 с 16 гб на борту - работает все нормально.
Вообще, считаю андроидстудио максимум легковестным после многолетнего опыта в VisualStudio.
936552
#427 #936199
>>936057
А сикретный ключ для несиметрических алгоритмов шифрования где должен храниться?
936353
#428 #936344
>>936057
Прости, но с таким же успехом можно подружить с сервером со своего устройства, и оттуда вытащить те же ключи. Разницы будет - 0. А вот как ты после DexGuard-а что-то с клиента, подверженное, вдобавок, дополнительной обфускации, вытащишь 0 мне стало интересно уже
936353
#429 #936353
>>936199
Ну расшифровывать ты все равно будешь на бэкенде. Так что там же.
>>936344
Сервер взломать сложнее, чем декомпилировать и деобфусцирвоать твой хуевый жабокод. Мобильное приложение - фронтенд. Нахуй нужен бэкенд, если твоя мобилка сама себе секьюр.
936376936378
#430 #936376
>>936353
Может чтобы разгрузить твой клиент от ненужной хуйни ? Мне собственно интересно, как ты хранишь ключи апишек, например, или ключи от базы данных с пользовательскими данными (и не пизди, что ты не делал ни одного приложения с ними, ога), ну или токены, что самое банальное ?
936408
#431 #936378
>>936353
И да, чет ты загнул, что DexGuard-ом прогнанный код легко деобфусфируется
936721
#432 #936408
>>936376
API keys не защитить никак. Как бы ты их не прятал, сетевые запросы легко перехватить и прочитать.

БД шифровать тоже особого смысла нет. За это отвечает (и должна отвечать) ОС.

Если у тебя OAuth, не какая-то самописная хуйня, то токены тоже нет смысла прятать.

Другой анон
936413
#433 #936413
>>936408
Почему с oauth не надо прятать токены?
#434 #936460
Есть вьюшка, а ней прикручен OnTouchListener.
Все замечательно до тех пор, пока вьюшка не разблокируется через setEnabled(false)
Проблема в том, срабатывает эвент ACTION_MOVE, а ACTION_DOWN нет - ведь вьюшка была заблокирована в момент приложения пальца.

В итоге получается очень не желательное поведение, которого должно происходить, только если был эвент ACTION_DOWN.

Как игнорировать все эвенты, перед которыми не было ACTION_DOWN?

Ничего не приходит в голову, кроме как в onDown() ставить переменную в true, а в другом месте проверять и после действия ставить обратно в false.
936469936477
#435 #936469
>>936460

>setEnabled(true)

#436 #936477
>>936460
Блядь, хуепадла ACTION_DOWN втискивается еще до блокировки вьюшки, и затаивается там, как сука крыса на весь процесс блокировки. А потом продолжает свое дело как ни в чем не бывало.

Видимо, вместо setEnabled придется еще и откручиватьэ\прикручивать OnTouchListener.
936479
#437 #936479
>>936477
Причем, втискивается в милипиздрическое окошко по времени, пока вызывается метод и доходит до строки блокировки вьюшки.
Коварно как.
#438 #936538
Котоны, помогите оценить стоимость работ: нужно приложение для андроид 5+, авторизация + 4 въюхи. Данные берутся по JSONRPC и отображаются в виде текстовой информации на вьюхах, бэк сервер готов
936549936666
#439 #936549
>>936538
Подробнее про вьюхи: какие и что на них будет отображаться.
Если хочешь - сразу на мыло: kots<-20162ANUSgmR(`ailPUNCTUMcgYqom
936568
#440 #936552
>>936058
Я вот использую Visual Studio 2010 Express для C# и по сравнению с AndroidStudio она выглядит максимум легковесной.
core i5 4690 8 gb ram
#441 #936568
>>936549
Проверяй мыльцо
936666
#442 #936666
>>936538
>>936568
Вы хоть ракалам-нубасам покажите, какие там суммы и примерно зиз чего складываются.
#443 #936721
>>936378
Маня. Обфускация - не панацея. Ты же не будешь например хранить secret_key в четырежды минифицированном js на странице. Отличие минифицированной жсины от обфусцированного жабоговна отличается лишь необходимостью декомпиляции последнего. Конечно, ты можешь хранить апи ключи в клиенте сделав многоходовочку - есть надежда, что просто не будут там искать.
#444 #936801
Подскажите какие нибудь более менее крупные проекты, которые можно понюхать. Дрочить мелкую хуйню по мануалам заебало. Свои проекты делаю, но иногда все же хочется посмотреть на нормальные проекты, пишущиеся командой людей, где все более менее по феншую.
Щас вот открыл дашчан пока что.
936813936848
#445 #936813
>>936801
Глянь здесь haskell.org
#447 #937142
А как можно в чистой архитектуре дядюшки Боба использовать сервисы, AccountManager и прочие контексто-зависимые классы ? Вроде и в Activity/Fragment пихать не хочется, а вроде и в data layer контекста быть не должно
937167
#448 #937151
Анон, как сделать чтобы floatinActionBar пропадал по скроллу вниз и появлялся по скроллу вверх, как в апке для вконтакте?
937219
#449 #937167
>>937142
В дата леере контект какраз таки плавает, ибо там в любом случае приходится иметь дело с интернет конекшном.
Остальные классы либо во вью, либо в дате.
#450 #937219
>>937151
Гугли про CoordinatorLayout, если я правильно тебя понял
#451 #937243
кто работал с камерой? у меня такая проблема, пропорции превью и реальные не совпадают вот
937475
#452 #937246
Как сделать возможность добавлять картику с телефона/камеры/соц.сетей и т.д.?
#453 #937255
У меня есть активити, с которым связано 3 *.xml файла:
activity_layout.xml
activity_content.xml
cardView.xml

так вот в контенте у меня RecyclerView из CardView
на CardView кнопочки, как мне написать для них обработчик нажатий и как привязать к обьектам, чтобы кликнув по карточке я мог получить id обьекта, который эта карточка представляет?
937265
#455 #937475
>>937243
Посмотри исходники barcodescanner в проекте zxing на github
#456 #938409
Сап, почаны! Опять реквестирую ответ на глупый вопрос:
почему многие методы стандартной библиотеки начинаются с on? onStart, onCreate, onSet.., это специальная синтаксическая приблуда закрепленная традиционно или как? Или есть спец смысл?
938460
#457 #938460
>>938409
onStart - при старте.Сразу понятно, когда вызовется этот метод.Такое много где встречается (onClickListener тот же).
#458 #938483
Есть анимация с

setRepeatCount(INFINITE);
setRepeatMode(REVERSE);

Хочу, чтобы некий метод запускался, когда анимация заканчивается до возврата обратно. То есть, один раз за цикл туда-обратно, в его середине.

Не получается через AnimationListener.
onAnimationRepeat выполняется два раза за цикл, а onAnimationEnd вообще ни разу.

Как, посоны?
938489
#459 #938489
>>938483
Или нужно сделать анимацию без повторов, а уже в ее AnimationListener выполнять метод, который сделает что нужно и запустит другую анимацию, которая движется в обратную сторону (а в конце запустит первую)?
87 Кб, 720x770
#460 #938498
Поясните. Как вот это https://github.com/yctung/AndroidLibSvm запустить на планшетике?
938509
#461 #938509
>>938498
Скачать zip.
Запустить андроид студию.
File -> import project на распакованную папку.
Run -> Run/debug
938511938514
633 Кб, 1776x2190
#462 #938511
>>938509
Спасибо, попробую.
#463 #938514
>>938509
Проще же
git clone & gradlew installDebug
938520
#464 #938520
>>938514

>gradlew installDebug


Ну проще разве что для красноглазых пердоликов, у которых припадки эпилепсии от человеческих интерфейсов.
938546942771
#465 #938546
>>938520
Но это же реально проще и быстрее.
#466 #938592
react-native-calendar-events кто-то юзал?
938593
sage #467 #938593
>>938592
В js-тред, уебище.
#468 #939050
Как поменять цвет контекстного меню? Какой атрибут темы за это отвечает?
#469 #939065
Ребят, почему используя Retrofit последней версии я получаю
Exception: Cannot read raw response body of a converted body
при попытке прочесть сырой body?
String raw = response.raw().body().string()?
#470 #939313
А на питоне нельзя наебашить под андроид? А на го?
939383939499
#472 #939397
Есть одно активити, оно запускается как popup, тоесть занимает не фулл экран, на фоне видно активити с которого я его запускал.
Как сделать чтобы фоновое активити было темнее, чем popup?
Как сделать анимацию, чтобы popup появлялся снизу вверх?
939531939547
#473 #939499
>>939313
На питоне есть киви, ебашишь сразу под всё кроме винфона.
#474 #939531
>>939397
А нахуя активити то? ебашь алерт диалог или диалог фрагмент, а там уже гуглится как анимировать эту срань
939547
#475 #939547
>>939397
У активностей можно переопределить анимацию через overridePendingTransition.

> Как сделать чтобы фоновое активити было темнее, чем popup?


Че?
>>939531

> алерт диалог или диалог фрагмент


Менее удобно же, с активити есть ламповый onActivityResult, а не богомерзкие колбэки. С просто алерт диалогом нихуя не удобно работать, если тебе приходится setView делать.
939669939822
#476 #939560
Котаны, как заново запросить разрешения после того, как пользователь выбрал "больше не спрашивать" в диалоге запроса разрешений?
939577
#477 #939577
>>939560
Никак. Показать ему диалог с инфой что без разрешения кина не будет, и выдать он его может в настройках, можешь даже сделать кнопочку которая его в эти самые настройки кидать будет, с помощью интента.
939589
#478 #939589
>>939577
Ага, спс. Так и сделаю.
#479 #939594
Как грамотно прятать токен с сессией пользователя? Пока храню в шайредпрефс, но очевидно это не лучшее решение.
939603939612939907
#480 #939603
>>939594
Зачем его сохранять? Он же по-идее должен генерироваться при каждом логине и удаляться через какое-то время неактивности.
#481 #939612
>>939594
Ниче не меняй, так нормально, можно сделать что бы он через некоторое время становился неактивным, это все на серваке.
99 Кб, 1080x1920
#482 #939669
>>939547
Ну вот так
939676939679
#483 #939676
>>939669
Так там по дефолту в теме dim указан вроде.
939677
#484 #939677
>>939676
Нет.
939681
#485 #939679
>>939669
Просто используй DialogFragment
82 Кб, 982x248
#486 #939681
>>939677
Я такую использую, затемняется нормально.
939692
#487 #939692
>>939681
Помогло, благодарю.
#488 #939711
Доставьте, пожалуйста, туториал для загрузки пика из галереи, сохранение его в битмап, обрезку и вот это все.
939712
#489 #939712
>>939711
ПРОСТО берешь и запускаешь интент ACTION_PICK
В результате получишь uri к файлу, если ты не с помощью DocumentProvider'a делал, то прийдется попросить пермишен на внешнюю память. А дальше берешь одну из сотни кропалок с гитхаба и без задней мысли кропаешь.
#490 #939822
>>939547

>>а не богомерзкие колбэки


если собираешься быть андройд разработчиком то придется привыкать, они везде
#491 #939907
>>939594
Если это временная сессия, то нормально и так. Если это какой-то более живучий по времени токен, то его хранят в AccountManager.
83 Кб, 634x385
#492 #939974
Есть тут люди которые работали с модулей Camera Fragment ? нужна помощь, потому что я дико криворукое хуйло. пишите в телегу t.me/ksmolniy
940017
49 Кб, 246x429
#493 #940000
Сап /pr/, есть один RecyclerView.
Нужно сделать чтобы даты выводились как в скайпе. Всегда висела полупрозрачная дата сверху, а при скролинге встраивалась в divider.
Есть варианты?
940002
112 Кб, 500x500
#494 #940002
>>940000
Хм, сейчас подумал что проще всего будет декомпилировать сам скайп
940007
#495 #940007
>>940002
Хуйня будет. Делаешь тип вьюхолдеров для дат, они будут в общем списке. А по скролу берешь у LinearLayoutManager'a первую и последнюю частично видимые позиции, дальше опираясь на свой список данных чекаешь есть там интересующая тебя дата или нет. Если есть прячешь отдельную вьюшку, показывающую дату, иначе делаешь ее видимой, как-то так, но я пиздабол с двача и возможно это будет не эффективно/не красиво.
940014940102
#496 #940014
>>940007

> но я пиздабол с двача и возможно это будет не эффективно/не красиво.


На самом деле норм, сам так делал.
sage #497 #940017
>>939974
Обоссал тебе ебало.
#498 #940056
Небольшое приложение состоит из одной активити и кучки фрагментов которые добавляются/заменяются/удаляются когда нужно, иногда используется back stack. Как правильно сохранять состояние иерархии фрагментов на случай если активити терминируют?
940072
#499 #940072
>>940056
Бэкстек фрагментов сохраняется в onSaveInstanceState, в чем твоя проблема?
940085
#500 #940085
>>940072

> Бэкстек фрагментов сохраняется


Я значит неправильно причину определил. У меня один фрагмент добавлялся в активити при создании (в onCreate), и потом он заменялся (когда нужно) на второй с помощью replace. При пересоздании активити фрагменты накладывались друг на друга. Я думал что там с бекстеком какие-то пиздарики, - но проблема в том что первый фрагмент добавляется всегда, и при восстановлении активити - кода он уже в бекстеке и новый добавлять не нужно. Какой нормальный способ следить за подобным? Конкретно в моем случае достаточно проверить глубину бекстека, это норм подход или нужно что-то более надежное писать?
940088
#501 #940088
>>940085
В onCreate:
if (savedInstanceState == null) {
addFirstFragment();
}
А иначе ниче не делай.
#502 #940102
>>940007
Спасибо анон, пошёл пилить.
19 Кб, 620x583
#503 #940176
Каким образом можно проиграть анимацию до закрытия активити? То есть мне нужно при создании или уничтожении активити проигрывать анимации появления/пропадания вьюх в активити. С анимациями при создании активити разобрался, а вот при уничтожении чёт не могу. Пробовал пихать анимации в finish() и onDestroy(), но они само-собой убивают активити прямо во время отрисовки анимации. Мне же нужно что бы оно подождало завершения анимации. Возможно ли это вообще сделать без фрагментов?
940224940267
#504 #940224
>>940176
Короче в пизду, ебанул колбеком.
#505 #940267
>>940176

> Мне же нужно что бы оно подождало завершения анимации


Берешь onBackKeyPressed, вызываешь в нем анимацию без super, в onAnimationEnd - finish. Но это похоже на лютую хуйню, что ты пытаешься сделать.
940271
#506 #940271
>>940267
Вот типа такой хуйни пытаюсь сделать - https://developer.android.com/design/material/videos/ContactsAnim.mp4
Там прежде чем закрывается активити floatingActiobButton сворачивается в точку. Соответственно при создании активити она восстанавливается обратно. Т.е. у меня будет куча анимаций (на каждую вьюху) и мне надо было сделать функцию, которая бы их все вызывала при открытии и при закрытии активити.
30 Кб, 799x686
#507 #940307
Возможно ли это как-нибудь упростить?
940352969376
#508 #940352
>>940307
Щас бы в subscriber'e observable создавать, вместо flatMap.
940356
#509 #940356
>>940352
Так-так. Вот тут по подробнее. Мне вообще что нужно - чекнуть бд на предмет записи, если запись == null, то вызвать функцию. Если запись != null, то сделать реквест на сервер, получить ответ, сохранить его в бд и вызвать функцию. Получается, я могу этот запрос сделать из flatMap? Но как тогда быть с вызовом функции? Бросить эксепшон и вызвать её в onError? Так бы не хотелось делать.
940357
#510 #940357
>>940356
А, точно, я же могу просто null вернуть и в subscribe если null то вызвать функцию.
24 Кб, 604x590
#511 #940363
Заебись.
940390940566
#512 #940390
>>940363
Зачем тебе onLoggedIn() в onError, у тебя такого не было.

> Бросить эксепшон


Есть же Observable.error, этот метод лучше чем throw.
940398
#513 #940398
>>940390

>Зачем тебе onLoggedIn() в onError, у тебя такого не было.


Короче там суть в том, что эта функция вызывается в любом случае. Она запускает новое активити, даже если произошла ошибка. Просто само активити будет работать либо в гостевом режиме (если в бд не было логина и пароля) либо не в гостевом (если логин и пароль в бд были и авторизация прошла). Вообще, наверно, лучше поменять их на две разных функции.

>Есть же Observable.error, этот метод лучше чем throw.


Запомню.
#514 #940566
>>940363
Пиздец макаронину ты написал
93 Кб, 1204x511
#515 #940570
Недавно читал в перезвоним-треде вкатчика из ваших, ему выкатили список вопросов пикрелейтед на 30к рублей. У вас правда всё так печально?
940618940621
#516 #940618
>>940570
Пиздец, на 30к просто сразу нахуй. Еще не удивлюсь, если позиция была на джуна.
#517 #940621
>>940570
Вопросы на 200 к.
Вообще охуели конечно.
#518 #940782
#519 #942771
>>938520
Дожили, открыть консольку и ввести одну команду умственно-остальным дегенератам уже сложно, им подавай жирную иде на скачивание чтобы разово собрать какую-то срань.
942772
sage #520 #942772
>>942771
*отсталым, конечно же.
Аноним #521 #944887
>>919925
Лучше сделать REST-сервис, а не использовать FTP.
Аноним #522 #944915
>>922508
Мы используем AdapterDelegates
#523 #946348
Аноны, есть один сервис, у сервиса есть API.
Сейчас вот задумали писать под него в том числе Android-клиент.
Подскажите, какой библиотекой проще всего организовать отправку и получение данных по POST в Android? А то я вот сейчас читаю и понимаю, что вариантов дохуя, при этом половина уже deprecated
Что нынче в тренде по этой теме?
947475
#524 #947475
>>946348
Retrofit/Guava (последняя - многофункциональная йоба, если нужно только запросы делать, лучше - Retrofit + OkHttp)
#525 #948669
А кто какие исключения отлавливает, делая http запрос ? Из очевидного только UnknownHostException всеми нами любымый приходит :)
#526 #961386
Котаны, поясните за Xamarin плиз.
Я тут просто попробовал пару приложений накатать совсем простых. И вроде все удобно и интуитивно понятно после AndroidStudio.
Поясните, кто любит, кто ненавидит и за что, почему...
Не такой как все #527 #962204
Антоны, шо за хуйня? Мне кажется, или блять все дружно решили вкатиться в андроид весной? я уже 1.5 года ебусь с джавой и андроидом, а тут набежало блять стадо с вопросом "как установить андроид студио", заебала уже эта ебаная ревность, аноны. Я из Харькова, аноны. Так вот, знаете, у нас общество делится на две категории, угадайте блять какие - фотографы и айти. Все вагоны в метро облеплены рекламой "обучим макакингу за нехуй делать и за ваши деньги", айти-школ больше чем детских садиков. На днях мне блять звонили с ШАГА УГОВАРИВАЛИ прийти к ним! переодически наталкиваюсь на комменты в стиле "вакансий джунов давно нет, идите нахуй". Знаете, все это как-то демотивирует и разрушает мои розовые мечты о светлом будущем, хоть я и такой же как все остальные, когда въебала крыза пошел в айти (но пока не дошел), но страшно бесит эта массовость и как-то хочется идентифицировать себя как уникальную личность, но не поулчается. Все. Очень. Плохо.
968326
#528 #968326
>>962204
Та же хуйня, решил вкатиться в ведро потому что думал, что веб и энтерпрайз это мерзко, а на всё остальное вакансий всё равно нету.
Только я ещё и живу в ебенях, и в отличии от тебя мне надо переехать и снимать хату и ещё мне 27.
Впрочем, если ничего не получится, то думаю выпилиться, так что похуй, уже можно сказать смирился.
#529 #969376
>>940307
Удали нахуй. Реально. Это убийство моих глаз должно умереть. Разбей логику по clean mvp
Тред утонул или удален.
Это копия, сохраненная 6 мая 2017 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски