Это копия, сохраненная 29 сентября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий тред: >>814733 (OP)
Коротко о главном:
1) Мобильная разработка - это весело.
2) Android Studio & Java - легитимный набор, проверенно временем и поддерживается гуглом.
А также о неглавном:
3) PhoneGap/Ionic/Titanium/ReactNative - имя им javascript, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная как и размер комьюнити.
4) Xamarin - мультиплатформенная разработка. Попытка серебряной пули на C#. Довольно популярный. Куплено Microsoft. Теперь есть бесплатная версия.
5) BugVM (RIP RoboVM) - идейный наследник ксамарина, а теперь уже и его часть но на Java. Учитывая что Microsoft убила RoboVM, встречаем опенсорсный BugVM.
Отдельного упоминания стоят:
1) Kotlin - Java от JetBrains, новый и стильный язык, куча синтаксического сахара прилагается, есть стримы и делегаты. Хотите писать на котлине? Добро пожаловать в JetBrains и Avito.
Где брать инфу:
Интернет-ресурсы
1) http://developer.android.com/index.html
Наша библия. Документация/небольшие примеры/гайды. Но только на инглише, но это плюс. Минус в том, что это все таки документация с небольшими примерами и гайдами и искать там реализацию чего-то хоть немного сложного нету смысла. Раздел Training как раз для старта.
2) http://stackoverflow.com/
Пользуюсь чаще чем первым сайтом. Можно найти практически все.
3) Есть два вполне вменяемых русскоязычных ресурса. Для старта подходят очень даже.
http://startandroid.ru/
и
http://developer.alexanderklimov.ru/android/
Второй еще и условно бесплатный. Главный плюс - это русский язык, простые гайдики, но переводы классов иногда заставляют фейспалмить.
4) http://habrahabr.ru/ - редко но метко, можно найти годные статьи по каким-то реализациям, или переводы с developer.android. Хотя чего тут объяснять.
5) https://www.udacity.com/ - в треде очевидцы говорили что есть годный курс, но я лично не смотрел.
Книги, их никто не читает, но все советуют только одну
1) The Busy Coder’s Guide to Android Development - в отличии от остальных книг она обновляется, а так как ведро не стоит на месте а хуярит семимильными шагами, то я бы и не советовал другие книги.
А теперь, так как заебали уже всех, гайд для:
>"Я хуярил на делфи 5 лет назад а теперь хочу вкатится в андроид":
Чтоб быстро хоть как-то вникнуть в джаву берешь и гуглишь javarush или codingbat.com.
Можно Эккеля "Философия java" почитать.
Или Хорстманн "Java. Библиотека профессионала" до 7 главы.
Что тебе нужно понять в самой жабе.
Энтри лвл.
1) ООП - сам принцип нужно именно понять, так как ооп язык.
2) Типы данных. Примитивы и ссылочные.
3) Структуры данных - Массивы/коллекции - без них никуда. Полезно почитать про алгоритмы работы коллекций и их сложности.
4) Дженерик типы, они как раз юзаются в коллекциях.
5) Классы/интерфейсы и все вытекающие.
Уже можно быдлокодить потихоньку и учить андроид параллельно с тем что ниже.
Дальше
6) Потоки ввода/вывода (streams). Не путать с тредами(threads).
7) Threads, особо не нужно вникать(в java.util.concurrent можно не лезть, в ведре все равно особо не пригодится), но нужно понять как работает многопоточка и что такое Runnable.
8) Прочитать про паттерны что-то. Начать с listener, adapter, singleton, iterator так как на каждом шагу. Ну и по накатанной.
Уже сделаешь что-то нормальное.
Дальше.
9) Работа с Sqlite, нужна будет в любом случае.
10) Работа с json.
Привет клиент-серверка.
Пацаны в треде засмеют.
Анончики, кто юзвет StorIO? Мне надо положить в бд два разных объекта, т.е. сделавть два put'a с разными классами, но надо чтобы они были в транзакции. Это делается через lowlevel? Т.е. например:
lowlevel().beginTransaction();
storIOSQLite.put().object(firstObject)...//First class
storIOSQLite.put().object(secondObject)...//Second class
lowlevel().setTransactionSuccessful();
lowlevel().endTransaction();
Правильно?
Всё верно.
Реально ли это и куда копать?
System service Connection manager
Ок
Привет, анон.
Как лучше всего защищать свой платный контент в приложении, при условии, что оно имеет возможность работать без интернета?
Что использовать в качестве ключа, варианты:
- hardwareid
- mac adress
- imei
- что-нибудь еще?
Google не рекомендует использовать ни один из них:https://developer.android.com/training/articles/user-data-ids.html
Суть в том, чтобы не допустить такую ситуацию:
"Вася купил платный контент и выложил файлы на 4pda, написав в какую директорию их положить, шоб всё бесплатно работало".
И еще вдогонку: как лучше всего аутентифицировать пользователя без необходимости ему вводить логин и пароль?
А если к email юзера привязаться?
Тогда и тот, кто купил будет доволен, что у него на нескольких девайсах работает и халявщики с 4pda немного поебутся.
Гуглологин, есть еще анонимная авторизация от фаирбейза.
>>829601
Вообще
> Because the Google Play client now caches In-app Billing information locally on the device, you can use the Version 3 API to query for this information more frequently, for example through a getPurchases call. Unlike with previous versions of the API, many Version 3 API calls will be serviced through cache lookups instead of through a network connection to Google Play, which significantly speeds up the API's response time.
Так что дефолтное поведение - ты можешь спрашивать у сервисов, купил человек что-то или нет у сервисов оффлайн.
Если у тебя есть бэкенд, то лучше привязываться к нему, ибо на бэкенде будешь валидировать покупку и отмечать у юзера, какой контент ему доступен. Тогда к мылу привяжешься.
На 4pda есть программа для смены hardwareid. Исходя из этого, можно предположить, что программы для смены (чтобы приложение так видело) email аккаунтов гугл также существуют, но их я еще не видел. Вариант развития событий:
"Вася говорит какой email вбить в утилитку."
А вообще привязка к аккаунту и поддержка нескольких девайсов будет. Еще есть вариант собрать всю возможную информацию об устройстве пользователя, склеить её в строку и зашифровывать так. В итоге для того, чтобы нелегально установить платный контент, придется каждый раз спец. утилитами менять информацию о девайсе, перед юзером будет выбор: заплатить 100р или затрахаться, (но зато запустить нелегально)
Спасибо тебе, посмотрю. Чуть позже отпишусь
Да забей. Халявщиков немного. Люди уходят из форумов.
Ебать я твой платный контент на раз два выкуплю через freedom. Попробуй защити.
И на коллбек на моем сервер от имени Google Play запрос пошлешь через freedom?
>>829639
Что в нём особенного? Ведь можно вручную это сделать, используя собственый сервер, или нет?
Можно, только зачем?
Спасибо за ссылку.
Когда вызывать
((MyApp) getActivity().getApplication()).getMyComponent().inject(this); ?
В интернете пишут, что нужно делать в onCreate(), но ведь тогда есть шанс словить NullPointer, ведь activity может быть еще не создана. Делать в onActivityCreated() ?
Кто как делает?
PS. Речь про Dagger 2, конечно же.
вроде нормально изучал ООП и джаву в частности
писал примитивные задачки под андроид(калькулятор на 2 числа, простенький список с чекбоками и переходом на другое активити)
че мне делать дальше? мб какие то курсы от гугла проходить или делать свое приложение, но уже боле сложное?
че посоветуете?
android developer nanodegree (стоит дохуища денег, но все материалы бесплатные)
там будет задание - написать приложение
да, пили более сложные приложения
как выше посоветовали, можешь пройти курсы на udacity: бесплатный developing android apps и платный nanodegree (ищи на торрентах)
> платный nanodegree (ищи на торрентах)
Так там платная только поддержка инструкторов и код-ревью. Какие нахуй торренты?
ну вот а в плане там устроиться на работу?
надо же какое то портфолио хотя бы 1-2 приложения вывложенных в плей маркете
и хватит ли знаний, полученных от курса юдасити, что бы претендовать хотя бы на джуниора андроид дева?
>>829947
а какое более сложное? вот например. просто я даже не представляю что надо делать?
> хватит ли знаний, полученных от курса юдасити, что бы претендовать хотя бы на джуниора андроид дева?
Если не тупой, то хватит.
> какое более сложное?
Клиент для Двача.
А, да? Прямо на их сайте проходишь, как и бесплатные? Заебись, я думал они сразу данные карточки просят ввести.
чето я не нашел как там бесплатно смотреть видосики и тд?
Только не пытайся выдумать что-то новое, всё уже написано. Клиент для какого-нибудь сайта, у которого api есть, напиши, с настройками и материал дизайном.
Если делаешь на активити, то с пятого андроида куча всяких новых классов для этого появилась. Если нет - ручками, наследуешь View, переопределяешь onDraw().
аноны, я опять со storio, я юзаю его вместе с rx, и там при каждом обновление таблицы емитятся данные, но мне это не надо, остается только юзать first()?
что скажете? стоит такое делать?
Чего ты нас-то спрашиваешь? Тебе интересно делать приложение погоды? Если да, пили, тут кроме дефолтного REST можно ещё поучиться работе с БД (ну там сохранять города, например), графону (визуализировать погоду), дерзай.
Для учёбы любое пойдёт, а погодное приложение это классика. Его же кстати пилят и в бесплатном курсе на udacity, developing android apps который.
щас спатки,а утречком начну
тут нормально к нуфагам относятся, ну там если спросить по мелочам всякое?
ах да еще вопросец:
знакомый андроид дев сказал, что сейчас уже все пользуються фрагментами и в активити никто особо ниче не пишет, только во фрагментах
это так?
Нет, пишут. Если тебе нужно K P A C U B O, то у тебя два варианта: первый - это на активити, на что заточен Design Framework гугла, второй - ты учишься делать как в телеграме стек View. Сложно, не для энтри левела и вообще к такому стоит подходить постепенно. Да, ты можешь скипнуть построение приложений на активити и сразу на фрагментах шлёпать (сами фрагменты, кстати, тоже по сути вьюшками являются), понять, в чём минусы и попробовать как-то эти проблемы решать.
ну по крайней мере я именно через недостатки фрагментов пришел к подсмотренному в телеграме концепту "стек вью"
ну вот я просто до этого все примитивные приложухи делал в активити
весь фукционал и примитивную графику
стоит ли заниматься фрагментами или сделать все в активити, а потом уже изучать фрагменты или стек вью вот эти о которых ты сказал
Если ты считаешь, что об активити у тебя представления есть, фигачь на фрагментах.
Млкобуква поясняет за НИНУЖНОСТЬ ФРАГМЕНТОФ. Классика.
(Автор этого поста был забанен. Помянем.)
Ведрач, шарполох пришел к вам за советом. Появилась необходимость запилить софтину на ведро, но Xamarim - гора костылей и не нужен. Поэтому буду на нормальную JVM вкатываться. Но от жабы у меня появляются рвотные позывы. А вот Котлин вполне годно. Главный вопрос - я с ним не сосну? А то может там еще больше костылей, чем Xamarin. Если все плохо, то я жабу перетерплю, только скажите.
100% interoperable with Java™
Котлин (в отличие от xamarin) запускается на той же вирт. машине что и java.
Он компилируется в обычный java-bytecode и использует java библиотеки.
>вроде нормально изучал ООП и джаву в частности
>че мне делать дальше?
Функциональное программирование + котлин
>>830084
Котлиноеб, на вопрос про di ответь.
Алсо вот есть
((MyApp) getActivity().getApplication()).getMyComponent().inject(this);
Нету ли лучше варианта чтобы инжектить? Такая то монструозная конструкция.
>нужно делать в onCreate(), но ведь тогда есть шанс словить NullPointer, ведь activity может быть еще не создана
Как если onCreate() вызывается после onAttach()?
https://developer.android.com/guide/components/fragments.html#Creating
В доке говорится что ты не должен обращаться к ее UI
> Note that this can be called while the fragment's activity is still in the process of being created. As such, you can not rely on things like the activity's content view hierarchy being initialized at this point. If you want to do work once the activity itself is created, see onActivityCreated(Bundle).
>>830093
>((MyApp) getActivity().getApplication()).getMyComponent().inject(this);
В чем проблема?, делаешь extensions-function к фрагменту
Да нет, ты просто смотришь, какие курсы входят в нанодигри и сам их проходишь. Все нанодигри состоят из набора курсов, которые доступны бесплатно. (материалы)
Проебался с перекатом, спасибо.
мимо-2-года-в-энтерпрайзе
Автоконфигами не пользовался.
> 2 года фиксил баги в богом забытом тырпрайзе
> думаешь либо выпиливать либо перекатываться в мобайл
кому ты нужен со своей жабкой?
Сильно. Но твой мозг уже деформирован шарпом, тебя уже всё равно не исправить.
короче сегодня встал и как и говорил начал писать клиент для опенвезермапс но столкнулся с такой проблемой
приложуха будет выглядеть как список, в котром первый айтем большой и показывает текущую погоду, а под ним обычный список с кратким описанием прогноза на некст дни
также при клике на любой айтем, открывается новое активити, в котором более детально это все описывается
так вот какие проблемы:
1) использую RecyclerViewADapter хочу сделать первый айтем списка отличным от других, почитав кучу статей в гугле пришел вот к такому коду - http://pastebin.com/dCugi1Qv
но почему то подчеркивает ViewHolder и просит заменить его на RecyclerView.ViewHolder
и так же подчеркивает мои кастомные холдеры в onCreateViewHolder(то есть вот эти return new FirstViewHolder(firstView);)
2) скиньте гайд как обрабатывать клики в ресайкл вью, а то я чето пытался, но вроде не то делаю.
Итак, давай по порядку.
У тебя от чего наследуется?
>extends RecyclerView.Adapter<MyAdapter.ViewHolder>
Дженерик - это как раз твой вьюхолдер, то есть у тебя внутри MyAdapter должен быть
>public class ViewHolder extends RecyclerView.ViewHolder.
>как обрабатывать клики в ресайкл вью
У тебя ссылки на View внутри ViewHolder'а есть, itemView - это, по сути, основной элемент. Можешь на него onClickListener повесить, позицию возьмешь из getAdapterPosition().
Не дописал про вьюхолдеры: если ты хочешь несколько разных сделать, то отнаследуй свои FirsViewHolder и NormalViewHolder от того, что я тебе сказал.
а что тогда в дефолтном вьюхолдере писать?
ну тот который >public class ViewHolder extends RecyclerView.ViewHolder.
Я тут сам чутка проебался, это если тебе есть что общего вынести. Если нет, все вьюхолдеры отнаследуй от RecyclerView.ViewHolder и в дженерике пиши extends RecyclerView.Adapter<RecyclerView.ViewHolder>.
Вот тебе пример из своих проектов: http://pastebin.com/qpXdKEw1
а вот какая разница в этих дженериках
типо если я напишу
extends RecyclerView.Adapter<RecyclerView.ViewHolder>.
или RecyclerView.Adapter<MyAdapter.ViewHolder>.
просто только сегодня начал изучать ресайкл вью, до этого листвью поьзовался, но в интернеах гвоорят, что эта вьюшка уже умерла и пришлось изучать новоее
https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
Возьми и почитай код класса Adapter, сразу всё поймёшь.
а насчет обработки кликов
я в коде все верно сделал?
типо создать интерфейс сначала надо, потом повесить онКлики, и в активити где этот ресайкл вью уже прописывать функционал, верно?
> но было бы неплохо запретить например подгружать новости на экране регистрации, или регистрироваться на экране новостей
Как насчет того, чтобы ПРОСТО не вызывать эти методы?
я их и не вызываю, но вроде как не комильфо, когда есть ненужные методы где-то, не ?
Реально ли сделать приложение, которое будет записывать:
1. кому звонил
2. сколько болтал
?
Ткните в пример кода, чтоб я понял, как перехватить вызываемый номер.
Спасибо. с меня 100500 нефти
Бля, да это же можно просто выцепить из журнала звонков. Нахера что-то перехватывать?
мимо-из-энтерпрайза
Ты хуйню какую-то придумал. DI это вообще про другое.
Это значит что нужно читать писать делать клиент серверка готовый для онлайн сервисов.
Возможно ли сделать авторизацию с Google +, без необходимости для пользователя вводить пароль, или даже email?
Смотри какая прикольная хуйня в интернете хранится
https://developers.google.com/identity/sign-in/android/start-integrating
может иногда стоит заглядывать подальше двача?
весело вы тут на андроиде кодите
Вот этот энтерпрайз-господин >>830561 прав, андроид предоставляет доступ к журналу вызовов:
https://developer.android.com/reference/android/provider/CallLog.Calls.html
Бляяя, чот представил как анон на собеседовании строчит в программач и спрашивает ответы.
Червь-пидор > Соискатель, спрашивающий ответы в программаче на собеседовании > Эйчар, спрашивающий ответы в программаче на собеседовании.
View
>Червь-пидор > Соискатель, спрашивающий ответы в программаче на собеседовании > Эйчар, спрашивающий ответы в программаче для собеседования > Эйчар, спрашивающий ответы в программаче на собеседовании.
> Червь-пидор > Соискатель, спрашивающий ответы в программаче на собеседовании > Эйчар, спрашивающий ответы в программаче для собеседования > Эйчар, спрашивающий ответы в программаче на собеседовании > программист на Котлине
Чтобы понять, что говно - это говно, необязательно его пробовать.
>приятный язык
Да хоть идеальный. Без инфраструктуры, сообщества, развитой среды, легаси, поддержки со стороны крупного бизнеса, удачи и прочего это ничего не значит. А для себя я могу и на D писать.
>2016
>на носу уже ява 9
>уже есть и экспериментальная жим с набросками явы 10
>на андроиде не завезли нихуя кроме шестерочки))
>Если бы не шизик
Ты кого назвал шизиком?
>>830655
Ташема 8 ява уже есть, а 9ку постоянно откладывают на декстопе при том что фичафриз уже был
А почему ты спрашиваешь?
бамп
Проделай эксперимент.
https://github.com/akexorcist/Android-RoundCornerProgressBar
С библиотеками не работал ещё, а с гитом подавно. Хотя нет, пикассо юзал, поэтому и ищу кнопку скачать.
ТАм просто jar файл кидал в папку библиотек и менял слегка манифест, а где тут - хуй знает.
https://developer.android.com/studio/build/build-variants.html#dependencies
Включай мозг иначе тебе в js тред
Ты акцентировал внимание на своей личности, давая понять, что ты — ОП-хуй предыдущего треда. На анонимной борде. Тут за это обоссывают, привыкай.
Ну сам подумай, доебался до меня что я акцентировал внимание лол сказав спасибо, но сам акцентируешь внимание на том что ты создатель этого треда.
Вообще это второй тред который создан не мной вроде бы.
И вниманиеблядство это немного другое, раз на то пошло нуфаня.
И наверное на этом и закончим.
>Google разработал целое руководство по наименованию переменных. Например, закрытая переменная на уровне класса должна начинаться с символа m (member), а далее идёт понятное название с заглавной буквы
Где об этом можно почитать полностью?
Не верь хуйне. Это стайл-гайд для исходников ОС Andoid. В приложениях это не используй. http://jakewharton.com/just-say-no-to-hungarian-notation/
> сам акцентируешь внимание на том что ты создатель этого треда
Ёбнутый? Где я это говорил? Чини детектор.
> И наверное на этом и закончим.
Закончим на том, что что я пошлю тебя нахуй.
Ну так аргументируй свое мнение, потом я аргументирую свое.
>>830782
Ну раз ты даун и не знаешь что презентер разновидность контроллера, то кто тебе доктор? Зато вортона цитировать мастак.
Я как раз читал, там нету аргументов против, просто хуйня в стиле "ну ебать венгерская нотация плохая" хуй пойми почему.
Главное как пишет коммьюнити, а она так пишет, и это достаточно удобно когда читаешь код.
Вот приставку s сам никогда не юзал, так как в контроллере статик поле это фу.
> Главное как пишет коммьюнити, а она так пишет
Не пизди. Почти ни одно топовое опенсорсное приложение/библиотека не использует венгерскую нотацию.
> "ну ебать венгерская нотация плохая" хуй пойми почему
Тяжело тебе.
Тебе уже дали ссылку. Нигде.
There is no such thing as an Android Java style guide that provides any guidance on how you should write Java code. Most people referencing this non-existent style guide are referring to the style guide for contributions to the Android Open Source Project (AOSP).
You are not writing code for AOSP so you do not need to follow their style guide.
Тыкни пожалуйста носом в нужную строку.
Пиздец, не либа, а говно какое-то.
Просто добавляй "_"
> Без инфраструктуры, сообщества, развитой среды, легаси, поддержки со стороны крупного бизнеса, удачи и прочего это ничего не значит.
Дурашка, можешь отрицать реальность сколько угодно, пока тебя не раздавит ее катком.
Давай разберем поподробнее:
>инфраструктуры
>развитой среды
вся инфраструктура джавы к твоим услугам
>сообщества
ну ты почитай форум блять или реддит, зайди на стековерфлоу посмотри вопросы по тегу kotlin, или наконец в слэк, где 4K человек постоянно что-то обсужают.
>легаси
это-то тебе нахуя? Пройдет время появится и легаси неизбежно. До тех пор можно радоваться что все стильно, модно и по-хипстерски
> поддержки со стороны крупного бизнеса
jetbrains поддерживает, гугл палки в колеса не ставит, gradle пилит дсл для своих билд-скриптов
> удачи
ну тут даже не знаю, если экспоненциальный рост строк кода на гитхабе за последние три года,
а также самоподдерживаемый миф в коммунити, что котлин - это дохуя прагматично в отличие от скалы, но при этом не так мерзко как джава - что как не удача
Один аргумент разрушит всё, что ты тут написал: если я сейчас зайду на хх, то сколько вакансий по котлу я найду?
Можешь не отвечать.
Да и зачем котёл, если каждый уважающий себя джавист и так знаешь скакалку[/spoller]
До россиюшки все не скоро доходит, что поделать.
Вот тебе вакансия c required skills Android Developer TDD Kotlin Java CI 600£/day в UKшке, подрочи на нее (я уже)
http://www.reed.co.uk/jobs/android-developer-banking-600-per-day-java-tdd-ci/30132691
Что будет лучше:
1. Сделать через MVP
2. Написать в один файл (ну а чё, а чё)
>слэк, где 4K человек постоянно что-то обсужают.
Кстати, последователи Вортона могут там с ним пообщаться, он постоянно там отвечает по android или rx.
>коллбеки на 200 строк
У тебя дохрена связывающего кода - стоит над архитектурой подумать:
- вынеси бизнес-логику в сервисы на уровень модели (не android сервисы)
- вынеси UI код в кастомные контролеры
- юзай более выразительный язык
После того как размер фрагмента уменьшиться до ~100 строк, подумай еще разок.
Это приведёт к увеличению кол-ва кода в несколько раз и усложнению архитектуры.
Не имеет смысла.
> Любитель спагетти рассуждает об архитектуре
Погугли Single Responsibility Principle
Я тебе даже помогу: https://www.youtube.com/watch?v=Gt0M_OHKhQE
final HandlerThread thread = new HandlerThread(TAG, android.os.Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
mBackgroundLooper = thread.getLooper();
mWorkerHandler = new Handler(mBackgroundLooper, new BillingCallback(this));
mMainHandler = new Handler(Looper.getMainLooper(), this);
В результате thread почему-то не живой (!isAlive()) и getLooper возвращает null, соответственно мой хендлер для бэкграунда валится с нуллптр в конструкторе.
Есть какой-то вменяемый способ это предотвратить? Или же нужно расширять HandlerThread, у него переопределять onLooperPrepared и только после этого переводить мой класс в инициализированное состояние?
>xx
>reed.co.uk
Ну ты понял, что обосрался, да? Да и в той вакансии требуется УЖЕ знать жабу. А ты предлагаешь пробовать котлин новичкам без знания жабы? Всякие котлы со скакалками востребованы обычно только в контексте с жабой, поэтому нехуй новичками советовать своё протухшее говно.
Надо сделать следующее: при выборе hui, все чекбоксы делаются неактивными и отмечаются чекбоксы 1-5, при выборе pizda то же самое, только 6-10. При custom можно выбирать какие хочешь.
Думаю сделать один обработчик на все чекбоксы, включать-выключать их программно в обработчике RadioButton.
Однако, у меня при любых изменениях в этих настройках текущий объект сохраняется в бд: поменял галочку - объект пересохранился, соответственно это сохранение находится в обработчике чекбоксов.
Получается, когда я выбираю варианты hui или pizda, я программно буду менять состояние чекбоксов, и получу как миниум пять последовательных сохранений объекта в бд.
Выглядит как-то уж очень уродливо. Есть ли способ программно поменять чекбокс без вызова его обработчика onChanged? Или может можно как-то отложить сохранение модели в бд до того момента, когда в ней "накопятся" изменения?
Или и так сойдёт, и я занимаюсь переоптимизацией?
Меняй сначала бд, обсерви ее изменения, а когда чет поменяется отображай новое состояние из бд.
Спагетти - это вкусно.
Из-за того что у тебя кнопки работают пол разному, это >>831079 без толку, так как при выборе третьей кнопки изменения вносятся от каждого чекбокса отдельно, тут или кнопка confirm и только потом общая запись в базу. Или оставляй вставки по чекбоксам как есть, для первого и второго радио баттона можешь сначала отключить лситенер на чекбоксах, записать в базу, выставить все чекбоксы и потом вернуть старый лситенер.
http://stackoverflow.com/questions/15523157/change-checkbox-value-without-triggering-oncheckchanged
Не понял зачем мне это, мне нужно новое состояние загрузить в бд, а не из бд.
Мне нужно забиндить сервис и приделать ему коллбеки.
У меня есть 4 коллбека, при их вызове надо добавлять и удалять устройства из списка.
Что здесь есть бизнес логика?
Костыльно, но лучше чем всякие confirm с точки зрения удобства. Так и сделаю, наверное, спасибо.
>Есть ли способ программно поменять чекбокс без вызова его обработчика onChanged?
Да, есть. Поставь ему null вместо листенера, потом поменяй состояние и верни листенер. Как приеду домой - поищу более красивое решение, оно у меня было где-то.
Будет работать если заменить на new HandlerThread(TAG); ?
А такой (пик 1) android-тест пройдет?
Не думаю что смена приоритета так сильно повлияет. Бэкграунд имеет приоритет чуть ниже чем дефолтный.
За ~год этот краш случился только на одном устройстве.
Сейчас проверю. Но все таки HandlerThread серьезно отличается от обычного Thread'a.
То что после start() у тебя isAlive() возвращает false это бага прошивки или сайд эффект другой ошибки.
Может в тот момент у тебя закончилась память или было превышено кол-во одновременных тредов.
Если это воспроизводится не постоянно, я бы вообще забил бы на это.
Я примерно так и сделал, если лупера нет, то ничего просто работать не будет.
> За ~год этот краш случился только на одном устройстве.
Есть решение: положить хуй. Абсолютно серьезно. Если на каком-то ноунейм бленово вдруг впервые за год происходит принципиально невозможная ошибка — это проблема этого самого бленово и его владельца. Завтра у него getResources активити будет null возвращать, а послезавтра у сервиса onBind перестанет вызываться. Никогда не ориентируйся на таких, просто совет не будущее.
Кстати насчет ресурсов, на разных устройствах(леново, хуйвей и лж), некоторые даже с шестеркой периодически вылетала такая хуита:
Fatal Exception: android.content.res.Resources$NotFoundException: Plural resource ID #0x7f0c0000 quantity=32 item=few
at android.content.res.Resources.getQuantityText(Resources.java:290)
at android.content.res.Resources.getQuantityString(Resources.java:397)
Но блять у меня что в values, что в values-ru указано значение для few. В итоге просто поставил туда try...catch который в случае падения ставил строку для few.
>>831085
Короче, в документации андроида в лайаутах используется android:onClick атрибут, значением для которого является метод c сигнатурой void(View).
Этот метод используется как общий метод когда дохуя чекбоксов или радиокнопок (как у меня).
В итоге, когда программно меняешь чекбокс, этот метод НЕ вызывается. Сделал всё на этих методах - на каждое изменение, будь то выбор радиобаттона, меняющего целый набор чекбоксов, или же один чекбокс приходится одно сохранение в бд (просто обновляю в методе объект, сохраняю, потом обновляю UI).
Подводные камни?
Ну единственное что зашквар, так это то, что активити должна иметь этот метод. А вообе хуле эти черти в документации про него пишут тогда?
я все тот же поц, который решил делать кдиент для опенвезермапс
возник вопрос при написании адаптера
а вот как мне в onBindViewHolder() заполнять айтемы данными, если у меня эти данные появятся только после парсинга джейсона и получения из него значений? или я чето не понимаю?
вот код адаптера - http://pastebin.com/XpFK7TPC
Што? Ты про стрелочки, ну хуй знает, может у тебя так в котлине заменяет, не ебу. У меня и пререндер для 24 апи не работает, пишет кококо запусти меня с 8 джавой, ты сука и так с восьмой запущен.
>>831272
Он не будет байндить если не уверен что на данной позиции у него что-то должно быть, если ты не указал в getItemCount() константный размер то он и байнд вызывать не будет. Ты должен создать/заполнить адаптер, только после получения данных.
ааа, кажись дошло
это типо мне надо все пропарсить, занести в лист, а в onBindViewHolder() вызывать геетеры
что то типо такого
WeatherForecast forecast = forecasts.get(i);
holder.country.setText(forecast.getCountry());
holder.temperature.setText(forecast.getTemperature());
?
Как получишь данные и вобьешь их в провайдер, в адаптере вызови notifyDataSetChanged() или аналогичный.
Нет. Ты неправильно понимаешь очень многие вещи. Пройди бесплатный курс от Гугла на Юдасити и твои вопросы отпадут. На этом курсе как раз показывают, как разработать погодное приложение.
Udacity загугли
Немного, косарей 150-200. Сам бы хотел такого работника, который дохуя времени пишет левый код, катается с докладами, пиарится, еще и в чатиках зависает?
Если этот работник двигает технологию на уровне её создателей, и допиливает руками те решения, которыми захотят воспользоваться тысячи конкурентов по всему миру - да, хотел бы.
А если он ещё и занимается самопиаром - его хотят очень многие кроме меня.
Он всрат вроде
Он приарит не только себя, но и компанию, в которой он работает. Что-то уровня корпоративных блогов на хабре, только на порядок лучше.
Бесплатный. Подводные камни - нельзя отдельно записывать обрабатываемые исключения. Только в общий лог.
У них пометка non-fatal, так что все норм.
>вроде как не комильфо, когда есть ненужные методы где-то, не
не
мимо-написал либу с сотней методов из которых реализуются 20 потому что насмотрелся такого на тырпрайзной работе-крокодил
Можно, просто это надо специально прописывать. А так — то, что надо, краши может тебе даже на e-mail отсылать.
Чем они плохи? На первый взгляд, они делают то же самое, что Butterknife + Dagger 2 и еще несколько приятных мелочей. Некоторые вещи реализованы проще (но это субъективное ощущение).
Почему же так мало обсуждений и примеров использования этой библиотеки? Есть какие-то подводные камни?
Можно это как-то исправить? Может не стоит заполнять в onPause?
2. git commit --amend полностью убирает промежуточную версию? У меня там нежелательные фразы были внутри файла, я их исправил амендом.
grep -lri "pizda" .git/* вроде ничего не показывает.
amend это то же самое что git reset --soft HEAD^ + git commit. да.
Конечно не стоит заполнять его в onPause. Ты вообще понимаешь, когда и зачем вызывается этот метод?
И как у тебя коммуникация между активити / фрагментами сделана? Сто процентов через жопу, раз тебе такие кульбиты выполнять приходится.
создаю новый :^)
>>831957
в onResume, оговорился
>>831960
Фрагменты решил не использовать, есть две активити: лист и детейл. Обычный круд, читается и пишется в базу. Коммуникации толком никакой нет - передаю id в детейл, когда вызываю, назад ничего не передаю.
Назад перехожу кнопкой бэк, по-видимому onCreate может не вызваться, может поэтому я запихнул в onResume. Не помню нахуя я его туда сунул.
К тому же я хотел добавить сортировку, а значит редактирование потенциально может наебнуть порядок элементов.
Мне показалось проще просто наебнуть всё, и загрузить по новой из базы чем передавать всякую малафью туда-сюда, во-всяком случае для прототипа сойдёт и так.
Master-detail тоже не планирую, хуй знает нужна ли мне вообще какая-то коммуникация?
} else if (id == R.id.nav_exit) {
startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
getApplication().onTerminate();
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
System.exit(0);
}
Ни один из вставленных выше методов не работает, ни по отдельности, ни вместе.
Ну тогда мне придётся делать из него поле типа mAdapter и инициализировать его в onCreate. Но инициализировать без данных его нельзя, значит придётся совать данные в onCreate, делая реквест к бд, и потом сразу делать ещё один реквест в onPause и обновлять их через notifyChanged.
Сделал короче ещё поле mHuitaList, в onCreate() инициализировал его как пустой ArrayList, обернул адаптером и сунул в RecyclerView. В onPause - mHuitaList.clear(); mHuitaList.addAll(db.getAll());
Выглядит говняно, но работает как я хочу.
Что же вы там такое говнокодите, что выходить должные через убийство процесса?
Очень надо разобраться до завтра с этим, а почитать на будущее я уже в шапке поищу.
http://xda-university.com/as-a-user/android-flashing-guide
Если совсем вкратце, то ядро лежит в разделе boot, который прошивается boot.img; замена ядра, соответственно, подразумевает прошивку нового boot.img. Раз ты это спрашиваешь, то, скорее всего, ядро c boot.img тебе придётся брать готовые.
Прошивается обычно из рекавери (режима восстановления), который запускается специфичной для твоего девайса комбинацией кнопок при загрузке либо командой adb reboot recovery. В рекавери заливается твой пакет обновления (zip с boot.img и скриптом установки) через adb push myyobakernel.zip, после чего устанавливается из интерфейс рекавери можно и через sideload.
Чтобы избежать сотен геморроя, лучше сбекапить разделы перед всеми операциями.
Твоя задача как разработчика аргументированно объяснить им всё это, а не безвольно плодить говно-UI.
И если тебе вдруг интересно, то у тебя иконки в дровере говно. А от пунктов "LogIn" и "LogOut" вообще себя медведям скормить хочется.
Мне казалось, что намного лучше инкапсулировать коллекцию в адаптер, что бы всякие операции add/addAll/clear/set/remove вызывать на адаптере и сразу вызвать соответственные notify*.
а писать говнокод не раздражает, найс
Попроси их найти выход в приложениях гугла, Вконтакте, телеграме, вотсаппе — том, чем они пользуются.
>во-всяком случае для прототипа сойдёт и так.
Ты и в продакшен будешь такой же говнокод пихать, идиот.
Сохраняешь в onPause (а именно в это состояние у тебя перейдет фрагмент/активити, когда уйдешь с него) текущую позицию, а в том месте, где биндишь адаптер к RecyclerView, проверяешь: если есть данные и в позиции положительное число (каждый раз, когда обновляешь данные, можешь затирать отрицательным) — скроллишь recyclerview туда.
>onCreate может не вызываться
Уход на другую активити, расположенную впереди, не является поводом для пересоздания активити, андерстенд? Кажется, на каждом углу вешают пикчи с activity lifecycle, из которой очевидно, когда что вызывается.
> не хочу программировать на java
Мало ли что не хочешь.
> Xamarin или React Native
Сорта говна.
> И завезут ли таки Swift
Да, можешь начать изучать, через 3 месяца подкатят девтулзы, будешь на коне.
Пора бы из шапки пидорнуть всю хуйню про замарин с реактом и прочим говном. Котлин можно оставить.
>Пора бы из шапки пидорнуть всю хуйню про замарин с реактом и прочим говном.
Там 3 строки про них, и вполне ваябл технологии.
Пошел ты нахрен, козел!
>Xamarin или React Native
Попробуй Xamarin.Native если только под Android или Xamarin.Forms если в кросплатформу хочешь.
С формами будешь меньше верстать (это самое уеб### в мобайле), а больше код писать.
>>832585
>Пора бы из шапки пидорнуть всю хуйню про замарин с реактом. Котлин можно оставить
Тебя блин забыли спросить. В шапке ровно пару строк для информации.
местный котлин-фаг
Бут заливается скриптом из пк? Или скрипт на пк, а Бут на смарте как при установке суперсу или аналога? Где брать скрипт, если есть готовый Бут?
>adb push myyobakernel.zip
Что это?
какой же я тупой
Кстати, можешь попробовать Flutter https://flutter.io/
Это проект разработчиков из гугл для создания кросплатформенных (android/ios) приложений в material-design.
Основной язык там Dart, а для UI используется подход из ReactJS/Native.
Ходят кстати слухи что на его базе и будут писаться нативные приложения для новой ОС от гугла (fuchsia).
>Бут заливается скриптом из пк?
push или sideload выполняешь с пека, да. Всё как при установке SuperSu, но только если boot.img зазипованный, а в META-INF/com/google/android лежит скрипт для его прошивки
> Где брать скрипт, если есть готовый Бут?
Если зазипованного нет, то adb reboot bootloader; fastboot flash boot boot.img
Для RecyclerView его нет.
Каков уровень пиздежа здесь по шкале от 0 до 10?
http://4pda.ru/forum/index.php?showtopic=763533
Он сам себя что ли на собеседовании опрашивал? Вон, и пять лет разрабатывал (и никаких гитхабов хоть с хелловорлдом или "гитхаб по запросу"), и промоутером был (кто о его приложениях слышал? Работ нет), и одновременно и во всех областях (битуби, битуси) поработал. 8 из 10.
если все это было правдой, он бы не искал работу
Могу посоветовать Haskell. Очень легко и приятно будет писать на нём после Swift'а https://github.com/neurocyte/android-haskell-activity/blob/master/src/HaskellActivity.hs
знаю что кутэ, может поэтому выход там и реализован, но сейчас уже похпоказал заказчикам ваши ответы, лол, угадайте где работаю))
Ты еще и работаешь?
неплохая дедукция, но я не настолько дебил чтобы скринить не из песочницы
И где здесь выход из приложения? Тут только разлогинится, это разные вещи.
И где тут выход?
Так ты еще и тупой? У меня то установилось, я же скрин показывал.
Ты тупой? Думаешь, здесь только двое вас — ты и тот даун с кнопкой выхода?
Пруф.
Можешь мне яйца полизать, если хочешь.
Посмотрел на твой пик и придумал fleshlight с блутусом, детектит вхождение твоего члена и посылает сигнал на десктоп / мобилку, на десктопе же 3д порно игрушка, ну и понятно, что fleshlight по сути манипулятор типа мышь.
Тащем-то если приспособиться то и в шутеры какие-нибудь можно играть.
Всё работает, не пизди.
Это будет приложение для bluetooth устройства.
Всего несколько экранов: 2 экрана где отображаются параметры устройства. Переключение между ними производится свайпом и один экран с настройками этого самого bluetooth устройства.
Как я понял мне нужен будет сервис, где буду получать информацию от BT девайса. Но как весь этот UI организовать?
http://rgho.st/82HhSdffd
Берёшь и организуешь. Можно ViewPager и два лэйаута, можно два фрагмента.
Ну и какая тебе нахуй Scheme, если ты даже код на C скомпилировать сам не можешь?
Там deprecated NDK используется. Хуй знает, как его сейчас скомпилировать. Много чего менять и заново настраивать придётся.
Антош, очень выручишь, на ведро нормальных интерпретаторов схемки нет кроме этого, остальные без нормального редактора
>>833297
У меня всё работает. http://rgho.st/8N62TcZmq Сам не запускал.
Хули у тебя все скриншоты в розовых тонах?
Лучше свой "пердак хохла via edition " доделать попробуй, а не занимайся хуйней со своим ниебаццо элитным контентом. Копираст мамкин, блядь.
Благодарю.
Пидора ответ.
Ты к разным аноним обращаешься. Лично у меня стоить Twilight, постепенно глушить экран и холодные цвета.
Ну,сначала да
Loader'ы говно предназначенное что бы по жидкому ходить в бызу данных или кеш. Если хочешь что бы все лежало в одной посуде то откажись от лоадеров в пользу Rx (c cache() и сохранением от поворотов в RetainFragment'e/Singleton'e)
Уже давно хотел посмотреть Rx, похоже настало то самое время.
Сразу вопрос возник - подойдёт ли мне RxJava если мне нужно работать с сокетами?
Тупой вопрос можно, но это несвязанные темы.
RX решает конкретную пробелему http://www.reactive-streams.org
Планирую, что у меня будет листвью контактов всех, по нажатию на каждый будет длительность входящих и исходящих
Пошел нахуй. Я писал, что сам не запускал. Анон писал, что у него сайт не работает. Я скачал апк и перезалил в другое место. Всё остальное меня не ебёт.
> для каждого контакта лучше создать sql базу
Прочитай про нормализацию.
А вообще, лучше тебе начать с официального курса Гугла на Юдасити. Многие твои вопросы отпадут.
на юдасити проходил курс. научился клепать калькуляторы, запускать и убивать активити и создал в итоговом задании приложение(одобрили).
Это который бесплатный
Там все курсы бесплатные. А ревью платные.
Я про продвинутый курс говорю, где погодное приложение создают.
Нюфани с платиной "Как мне вкатиться в Джаву?", вам сюда: https://stepik.org/course/Java-Базовый-курс-187/
Просто юзвери мудаки, очевидно что val это то же самое что и final. Иммутаьельность что бы совсем как const const * ты в джавке никак не имплементируешь.
Молодец, аноняшь, давай больше статей для нюфагов по котлину
> val does not mean immutable, it just means readonly
А это было кому то не очевидно? Достаточно доки открыть.
> These can be declared as mutable, using the var keyword or read-only using the val keyword
Так было не всегда. https://github.com/JetBrains/kotlin-web-site/commit/b4476b50950dcbfcc3f05dc92cef63e71535eccb
Раз ты задаёшь такие вопросы, то не пора.
Не, не думаю что такие ебланы есть в нашем треде. Разве что с кнопкой выхода.
Пароль же можно хранить в шифрованном виде, даже расшифровывать не нужно.
Может аргументируешь?
Если юзать односторонее шифрование для пароля то хранить ты его в зашифрованном виде можешь хоть на экране телефона, правда немного с алгоритмом повыебыватся нужно.
Как оно работает. Человек вводит пароль, ты его шифруешь и на выходе сравниваешь с тем что у тебя в шаредах сохраненно.
И да, так просто никто твой пароль не расшифрует, как и ты сам впрочем.
Какое нахуй "одностороннее шифрование"?
Ты вообще вопрос по ссылке читал, болезненный? Ему этот пароль нужно для АПИ дропбокса передавать.
> Короче поясняю для даунов ИТТ.
Даун поясняет для даунов. Так и живём.
>Так было не всегда
Так было всегда.
Это называется "исправить неоднозначности в документации".
Никогда такого не было, и вот опять!
> исправить неоднозначности в документации
> А это было кому то не очевидно?
Джва года.
Тебе лет то сколько, стажерик?
Вкатывайся лучше в js/php или тестирование, на это способная любая макака с улицы.
31
Что плохого то?
У меня например foreground сервис завершается из уведомления или через кнопку "завершить" в приложении.
Ей кстати довольно ребко пользуются, но все равно она нужна.
ЧТоб xml файл внешнего стиля приложухи хранился где-то типа на дропбоксе.
Вдруг, например, я решу в приложение вкатить баннер рекламный, тогда мне обновлять не придётся его в плэймаркете, а просто файлик в онлайне добавлю имэджвью
Перепись ебланов продолжается.
Можно воспользоваться xml парсером, и вызывать программное создание вьюшек при парсинге файла, прямо как андроид и делает. Но идея дерьмо, апрув в маркете очень быстрый, никуда твой баннер не убежит. Тем боеле тебе всерано нужно будет поставить галочку что в приложении есть реклама, что бы тебя не пидорнули.
Вернусь на активити, ну их нахуй с этим вьюпейджером не поддерживающимся ничем
Всё там работает, scrollToPosition().
Активити-то тут причем, какая связь с ViewPagerом, ты ебанутый?
он у меня в фрагментах.
ненавижу, блять, работать с фрагментами.
То ли дело с активитями и переключаться между ними и данные передавать. Всё просто и удобно.
а тут блять говно собачье сука.
нет бы просто по клику интент(эта активити, нужная активити).
рисуй блять говно
Ты точно ёбнутый.
Всё для анона.
Её автор на последнем I/O выступал.
Годная вещь или нет?
Не перестал, ужас как всё уёбищно.
А вот формочки на JS писать - одно удовольствие! Сходи в JS-тред, тебе раскажут.
ну у меня на гуглплей две проги, одна на кут, вторая на хтмл5+яс, на этом я послал андроид нахуй.
Но как предотвратить вызов коллбека, который был создан в активити, которая уже уничтожена к хуям?
1) Возми за основу пример из Android SDK с CancellationSignal
https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery(java.lang.String, java.lang.String[], android.os.CancellationSignal)
2) Возращай объект к которому можно подписаться или отписаться. Отписывайся в onDestroy()
Посмотри как это реализовано в Observable<T> в библиотеке RxJava
Толсто
Вот кстати в моём случае нужно отписываться только от тех коллбеков, которые используются в активити, которую хотят уничтожить.
Остальные при этом трогать не нужно.
Пойду потискаю кунца и спать. Завтра почитаю.
Несколько правок по >>834824
Ссылка на первый пример с rawQuery
https://d.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery(java.lang.String, java.lang.String[], android.os.CancellationSignal)
Пункты 1 и 2 это альтернативы, а не последовательность действий
Подписывание в RxJava идет через вызов метода subscribe(параметр: лямбда-колбек).
Это метод возвращает объект Subscription у которого можно вызвать метод unsubscribe() что бы отписаться.
Кстати в RxJava 2.0 они немного изменили название классов, можешь сравнить с версией 1.x.
У фейсбука весь софт говно. Их опенсорсные библиотеки такие же. По возможности избегай.
Посмотрел - идея понятна.
Только отписывание подписок здесь выглядит красиво, пока этих подписок мало.
Если их дофига наверное проще сделать в onDestroy: foreach(Subscription s : subscriptions) if(!s.isUnsubscribed()) s.unsubscribe();
Я тебе даже так скажу: там колбэк дергается в onActivityResult, можно было оставить обработку там (или просто вызов метода), но нет, надо было захуячить туда колбэк. Нахуя? Да просто))
Вксдк страдает той же сранью, но хотя бы ссылку не держит.
Вообще то если у тебя залочен поворот, то в 99% случаев никакого пересоздания активити быть не может.
Тем более у fb окно показывается с прозрачностью, а в таком состояние android не имеет право удалять нижележащие активити.
А код в итоге получается куда как проще.
Недавно делал игру под андроид, там было только одно активити и то всегда в лендскейпе.
Вот тут пришлось поебаться с VK что бы переделать это:
1) вызови VK.login
2) в активти переопредели метод onActivityResult
3) в нем обработай нужный результат и вызови сохраненные где-то колбеки
на один метод
AuthService.login(): CompletableFuture<User>
Для этого есть CompositeSubscription в который можно сложить все подписки и одним методом отписать сразу все
Да, про это я в курсе, действительно вк в этом плане посиупила лучше. Увы что там что тут костыли.
> А код в итоге получается куда как проще
Ну да. Дернуть onActivityResult + дернуть колбэк проще чем просто дернуть onActivityResult, ага.
https://github.com/streamsupport/streamsupport
>>835050
> 2016
> хранить бизнес логику в активити
Кто тебе мешает из активирезульта дергать метод презентера с передачей результата?
1) приходится повторять это глупый код из презентера в презентер (если авторизация есть на нескольких окнах)
2) логика размазывается по множеству разных классов (а нужно ее инкапсулировать)
3) она становится хреново НЕ кросплатформенной, а писать тупо под Android уже давно наскучило.
В той же iOS я просто дергаю метод с колбеком (или промисом) и все работает асинхронно.
В Android же мне приходится ебаться с "жизнеными циклами" и переоределением методов внутри активити.
Надеюсь в своей новой ОС гугл исправит эти недостатки.
Вроде бы уже заняли 90% рынка, теперь пора делать по нормальному.
>Какой же ты долбоеб.
Эх люблю сосач, такие то аргументированные беседы :3
Да.
Ояебу. Видимо будет у меня куча HashSet'ов.
К примеру в андроиде есть один большой коллбек на ~10 методов, типа onWrite, onRead и оттуда надо будет дернуть listener, от соответствующего устройства. Ну да пох, это та самая "низкоуровневая" прослойка, которая должна работать. А как она реализована - пох.
Идея с subscription в стиле RxJava крайне хороша и пока не видно недостатков.
Подразумевается ли, что после вызова unsubscribe() произойдет не только отписка коллбека, но еще и отмена той самой асинхронной операции?
Нет, вызов unsubscribe только отпишет подписчика.
По удаленке сессно.
У меня есть sticky сервис, который должен иметь опредлённое состояние, которое ему дают при инициализации. Также мне нужен доступ к этому сервису из любой точки программы.
Сделал синглтон, в нём создаю сервис через bindService, и соответственно имею на него ссылку mService.
Я ожидал, что синглтон будет жить всегда, и хранил в нём состояние, а сервис просто пересоздавался.
Однако, если убить программу, то уничтожаются все мои объекты, а сервис потом просто пересоздаётся самостоятельно, естественно, без старого состояния. Потом подумал хранить ссылку на синглтон в сервисе, а а синглтоне на сервис (пиздец, можно так вообще делать?), но это всё равно не помогает.
Пока писал, ещё кое-что понял: для меня sticky сервис это то же что и вечно работающий демон, не зависящий от окошек программы. По-видимому андроид иного мнения, и я не должен ожидать ничего долгоживущего. Может стоит сохранять состояние в shared prefs в onDestroy, если сервис нормально не просили завершиться через соответствующий метод? onDestroy гарантировано вызывается?
Стоит. Какая тебе больше подходит и нравится.
Стоит или не стоит это вто выбор. Я напрмиер и голым SQLiteOpenHelper'ом и Realm'ом пользовался, вот сейчас StorIO ваще нормас. А с ОРМ как-то не сложилось.
Нет не ОРМ, это удобный фасад который закрывает от тебя кишки SQLiteDatabase и ContentResolver'a. Реактивный и вообще заебись с rx идет.
Вот ак я передаю значения с едитТекста в другую активность
EditText editText = (EditText)findViewById(R.id.editText);
Intent intent = new Intent(MainActivity.this, GraphActivity.class);
intent.putExtra("ALPHA", editText.getText());
startActivity(intent);
А вот так я его принимаю:
double alpha = getIntent().getExtras().getDouble("ALPHA");
Но почему-то не работает, я подозреваю, что вторая активность принимает null, т.к. если я задам значение вручную то все работает, а если через интент - не работает.
>активность
Не надо так.
Задумайся что возвращает getText(). Праивльно, оно возвращает Editable, но никак не double, а ты пытаешься достать именно дабл. Ты сможешь достать оттуда CharSequence. Но дабл не сможешь, так как там даже в логе видно класс каст эксепшн.
А как мне тогда передать дабл в другую активность, использовать другой вью?
Вообще попробовал разное, оказалось у меня sticky сервис вообще не перезапускается.
Раньше я создавал сервис в активити, а сейчас создаю в обычном классе, использую applicationContext. Если убить приложение, то onDestroy не запускается и сервис не перезапускается.
Что делать?
Не стоит. SQLite и StorIO - выбор настоящих мужчин.
блядь, дело даже не в контексте. Если создавать сервис в активити, то каким-то магическим образом он получает возможность пересоздаваться. Кормил ему application context, всё равно перезапускается. Хуйня какая-то.
Разобрался тебе за щеку.
Да хоть на Хаскелле пиши. Мне так-то поебать. Я просто считал кое-что.
eblansCount++;
Можешь попробовать greenDAO, у неё минимальный оверхед за счёт генерируемого по схеме кода.
Может в твоей задаче ORM и не нужна.
Есть к примеру cupboard - он генерит таблицы из классов.
Так любая орм поступает
оставить putExtras() и, как выше сказали, преобразовать строку в double.
Ну типо мне
1) Делать штук по 6 копий одной картинки для разных dpi от ldpi до xxx_super_pooper_hddpi?
2) Хранить один здоровый пикч, но юзать уменьшенную битмапу?
3) Забить на все и сетать один большой пикч как есть, в заданный размер ImageView (типо 20dp на 20dp) - и бояться что когда-нибудь апа начнет жрать под 100 оперативки?
Само собой я успешно внедрил 3й вариант. Но все же, как правильней?
Погодное приложение, мучу иконки (дождь там, снег, град). Примерно 1/6 экрана пикча занимает.
Используй вектор. Есть отдельная библиотека для SVG.
Если картинка у тебя не векторизуема, значит у тебя устаревший не материал дизайн.
Не, не, все должно хорошо в вектор зайти, я и сам хотел спросить.
Можешь подсказать чем в вектор превращать (не в ручную ведь, надеюсь?). И хорошую библиотеку для работы с svg?
Лучше что я встречал это Adobe Illustatror, там есть векторизация картинок.
Хорошей не знаю, последний раз интересовался этой темой года 3 назад.
Юзал эту либу (вроде) https://github.com/japgolly/svg-android
Вот кстати интересный сайт для перевода SVG -> Android VectorDrawable
Аноны, как правильно настроить проекты для юнит-тестирования приложения? Есть проект, состоящий из трёх "подпроектов" MyApp (shared code, MVVM), MyApp.iOS и MyApp.Android.
По идее, чтобы всё это дело можно было протестировать, нужно создавать отдельные тестовые подпроекты это ж надо было такую хуйню сделать, а?. Типа так: MyApp.Test, MyApp.iOS.Test и MyApp.Android.Test.
Только что-то не работает нихрена. Постоянно разные ошибки, код из shared-части не находится, или не инициализируются сервисы. Версии NUnita нужны разные у разных подпроектов (NUnit, NUnit Lite и NUnit Xamarin Runner), тоже не совмещаются вместе..
Есть тут кто-то, кто смог сконфигурировать всю эту хуиту вместе? Или хотя бы, есть какой-нибудь пример? На гитхабе пусто. Есть только две куцые статьи, которые не сильно помогают https://developer.xamarin.com/guides/ios/deployment,_testing,_and_metrics/touch.unit/
https://github.com/nunit/nunit.xamarin
Ненавижу это говно
Это хуйня из прошлого века.
Поддержка векторной графики есть в Support Library начиная с версии 23.2. Вот как пользоваться: https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88
Но! Не стоит злоупотреблять векторами. Их отрисовка на слабых устройствах может занять ощутимое время.
Недавно ебался, вроде жить можно.
Правда у меня unit-тесты только на бизнес логику (и "andorid"-сервисы я не юзаю).
Для интеграционного тестирования у меня UITests.
Не посоветуешь ничего? Статьи, доки, примеры? Или свой опыт, может есть секреты какие?
Я уже что-то долго с ним ебусь, но успехи пока не очень.
Ну и в чем смысл векторы тогда использовать? Если так делать, то только время на генерацию каждую сборку будет тратится дополнительное и всё, никакого профита.
Это как, не подскажешь?
Тем, что тебе не надо самому подготавливать все эти hdpi, mdpi.
К тому же, вектор изменяется прямо в студии, если тебе нужно поменять цвет иконки например, тебе не надо лезть в редактор, изменять и создавать под каждый dpi.
И генерация пнг довольно быстрый процесс, куда быстрее того же minifyEnabled'a.
Также, тебе в этом случае не надо использовать srcCompat, а пользуешься обычным src как всегда.
> Вкатывайся лучше в js/php или тестирование, на это способная любая макака с улицы.
В разработку под мобилки — тоже, лол.
Чет я не видел девушек-мобильных девелоперов (ладно одну видел, но она была очень слабой).
А вот фронтендщицы/тестировщицв валяются на каждом углу.
Да ХЗ, я вообще начинал с UITest'ов и уже после того как закончил всю программу.
У меня большой плюс что после первой версии дизайн слабо менялся, но при этом я мог как угодно рефакторить код.
Буть у меня изначально юнит-тесты, это был бы большой геморрой, менять их после каждого рефакторинга (а я эт дело люблю).
Сейчас сам вляпался, когда оказалось, что нужно протестировать работу WebView через AndroidTest.
Вот это жопа, NUnitLite хреново работает с async/await, на форуме писали о багах, но походу фиксить пока не собираются.
Как вариант там предлагают альтернативную библиотеку, но она конфликтует с моей версий AndroidSupport.
По этому я решил написать своей мини-фреймворк для этой одной задачи.
1) Правильно ли я понимаю, что в коде на пике zip работает следующим образов: идет асинхронное выполнение запросов, после чего идет ожидание того, пока придут оба ответа, или же запросы выполняются поочередно ?
2) Как преобразовать стремный if-пиздец на пике ( с response/result ) во что-то красивенькое ?
3) При использовании zipWith сначала выполнятся запросы до него, а после этого запрос, присоединенный zipWith, или же нет ?
p.s. Так как требуется добавить еще один запрос после выполнения предыдущих, который юзает те же входные данные, уточняю за zipWith, в коде его нету, ваш Кэп
Ну и как ты это сделал? Как только я удаляю шестую она переключается на 8, как возвращаю ее из корзины - сразу на нее садится. Но дело в том что на 6-й шрифт лучше.
http://rxmarbles.com/#zip
1) да
2) использовать RuntimeException'ы.
retrofit.update().doOnNext(x-> if (x == null) throw new RuntimeException(ERROR_UPDATING))
Хотя есть мнение, что такое нужно делать через
retrofit.update().flatMap(x-> if (x == null) Observable.error(new RuntimeException(ERROR_UPDATING)))
else Observable.just(x)
3) Хуй знает, но судя по картинке, поведение то же самое
http://reactivex.io/RxJava/javadoc/rx/Observable.html#zipWith(rx.Observable, rx.functions.Func2)
Алсо, нахуй ты из сабскрайба зовешь другой сабскрайб, если у тебя есть божественный flatMap.
Оберни getAuthData в Observable.create, в котором ты вызовешь subscriber.onError при unathorized exception.
Слушай, а можешь показать содержимое своего MyApp.Android.Test/packages.config?
А что ты делаешь c Subscrption которые кладешь в subscrption?
нашел один общий, который гуляет по интернету - скопипастил его, ну ок,чо.
один из бомжей талдычит, мол существует всего 4 основных файла, которые должны быть в проекте: gradlew, gradlew.bat, и еще какая то залупа со второй на пару. первый служит запускатором скриптов gradle для юниксоподобных систем, второй для винды, другие два чесн, не помню что делают, потому что проверив эту уебскую теорию и залив на гит свой проектик - gradlew.bat взял и обновился, будто я внес ему какие то изменения. ну я ахуел, думаю - идите вы нахуй, пидарасы.
и дальше в последствии несколько часов еще беспрестанных поисков, нашел ток вот это, вроде самая логичная хуйня, только объяснил бы мне кто где, какие Gradle файлы НУЖНЫ в проекте, а на какие можно класть хуй
.gradle
/local.properties
.DS_Store
/build
gradle.properties
.idea
.navigation
/captures
*.iml
gradlew
gradlew.bat
имл файлы - файлы моего интеллижа, ок - нахуй не нужно, так же как и папка идеи.
вот с остальным я хз
Там написано. Получаешь api key и вперёд, можешь снова пердолить свой велосипед.
> gradle.properties
Можешь оставить, можешь убрать
> gradlew
> gradlew.bat
Должны быть в репозитории.
Выше уже скинули ссылку на стартовый набор.
>Ты долбоёб?
>только объяснил бы мне кто где, какие Gradle файлы НУЖНЫ в проекте, а на какие можно класть хуй
ТЫ долбоёб?
изначально этим игнором и пользовался, вот только у меня файл, который я не трогал обновился сам по себе, и его нужно было внести в коммит. ТЫ долбоёб?
Спасибо
Почитай, что такое gradle wrapper, долбоёб. Файл у него сам по себе обновился.
спасибо, спесивый долбоёб
> 2016
> использовать git
Любитель меркуриала или VCS-нинужнопетух?
>> gradle.properties
>Можешь оставить, можешь убрать
Там же параметры для скрипта сборки и ключики для релизов, точно не в гит.
> ключики для релизов
Их там нет. Если у тебя есть, то ты сам их туда добавил. Следовательно, сам долбоёб.
Ну прям вечер срыва покровов - везде одни долбоёбы, оказывается
Любому андроид-разработчику, претендующему на снятие ярлыка «днище».
Когда H.264 или opus на киткате и ниже понадобятся, вспомнишь про NDK.
на самом деле никому кроме телеграма нахрен скорее всего не сдался opus-кодек
Парни, у меня жопа горит, потушите плез.
Это говно не видит мой девайс. Скачаны всевозможные апишки, дебаг мод он, куда только не втыкал. перезапускал, 100500 драйверов скачал, а пидорас все равно не видит.
Через панель управления если заходить, то пишет 'нет данных'-это типа комп сам не особо видит девайс?
И как его заставить видеть тогда, я уже заебался, чес слово. Каждый раз вставляешь, тыкаешь, оповещение об 'установке драйверов для устройства' иии все.
Телефон хуавей4с, не гугл нексус.
А куда ты их записываешь, в переменные среды, или прямо в билд скрипте оставляешь, лолка?
Соси китайское говно.
Ты на телефоне то все включил? Он сам блочить подключение может. Сначала добейся что бы его комп видел, а потом приходи жаловаться на adb.
Да, все. И тыкал переключение между фотками и папками(ptp mtp).
Комп его вроде видит, постоянно файлы перекачиваю.
Ну тогда попробуй adb devices
1) Кто с чего начинал, можно ли самому освоить java и научиться писать проги под андроид ?
2) Сколько времени это у вас заняло ?
3) С чего начать мне, какие сайты , книги очень доступно и что самое главное оптимально (без хуйни) научат меня программировать ?
1)Нет, тебе не обойтись без документации.
2)пару недель, и то, потому что я много сериалов смотрел
3)шапку, значит, читать мы не умеем
>Нет, тебе не обойтись без документации.
Что за документация ?
>шапку, значит, читать мы не умеем
Читал, там-то про делфи а не про паскаль написано )
Очередной вкатывальщик. Пройдите пожалуйста в js/php тред, они специально для вас
minSdk 21 ставишь? Хуя ты везунчик.
Слишком толсто
Что-то в local.properties, что-то в ~/.gradle/.gradle.properties, что-то в отдельных файлах.
Научиться программировать на Java или Придумать приложение, которое ты собираешься сделать для андройд чтобы срубать с него бабла ?
>реклама
Пшик, деньги делают те, у кого полная экосистема - мобтльные приложухи, серваки, вебприложения, те у кого есть сервис, и контент.
заебс я значит этому в политехе 4 года учиться должен, а тут тип за месяцок освоить без хуйни хочет, ну ты смешной)
>мобтльные приложухи, серваки, вебприложения, те у кого есть сервис, и контент.
Т.е. надо все это иметь вместе чтоб бабло рубить ?
Надо мозги иметь и не задавать тупых вопросов.
Не слишком ли много вопросов?
Не работает. Return тоже. Единственное, что заработало - последний пик, но это пиздец.
Значит true без return работает только в многострочных лямбдах, когда он идет последней строкой.
Бля, там просто надо было без скобок. После шарпа думал, что без скобок только одну строку можно.
Попробуй начать с изучения Kotlin https://kotlinlang.org/
На нем любое приложение приносит на 78% больше денег,
даже на РБК писали http://www.rbc.ru/politics/07/09/2016/kotlin-prinosit-ogromniy-dohod.html
мимо живу на доход с одного приложения
Круто, опиши свою историю успеха
вопрос не в этом, я понимаю что разницы не то чтобы много будет. Скажем у меня есть AppComponent, View1Component и Presenter1Component. Скажем нужно добавить еще слой, с дочками View1Component и Presenter1Component. В таком случае где должны инициализироваться компоненты и как их оттуда вытягивать, чтобы инициализировать дочерние ?
Подскажите почему не получается вывести?
И есть ли у кого-нибудь сурскод подобного?
Это все все равно тебе не понадобится, так что забей
>Двач, помоги пожалуйста. Пытаюсь разобраться с >Обращение к статической ридонли переменной через объект
>квери в главном потоке
Пизда тебе. Попробуй cursor.moveToFirst. Поставь вместо заполнения логирование этих самых штук, у меня ощущение что у тебя в while не заходит, возможно результат пустой. Посмотри cursor.getCount
Хуль ты доебался, он даже просто прочесть из бд не может, а ты про главный поток.
Я злой прост, сроки горят. Ну я ему намекну что в вайл нихуя не заходит.
придумал программу, называется программа для общительных (это даже не название, просто суть), но идеи не расскажу. Ну а ты сделай копилку для порно, к примеру, у тебя есть корзина, в которую добавляется один порно ролик в неделю, и ты можешь его посмотреть соответственно если он есть в корзине.Как карта на которую деньги приходят, как приходят, ты можешь потратить, так и тут как пришло, можешь подрочить. Это для тех кто хочет себя ограничить в этом ) Но я не программист если че, просто пока планирую вкатиться.
Изи:
Трекер расходов. (усложнение: синхронизация между устройствами)
Очередное приложение о погоде.
Средне:
Музыкальный плеер. (усложнение: с музыкой из ВК)
Т.е. мы пишем соощения тут, они тут же отправляются на сервер, а чтобы посмотреть сообщения программа выгружает их с сервера на экран, так примерно ?
Примерно, программа по сути показывает данные с сервера, проводит над ними некоторую обработку, может изменять данные на сервере, добавлять новые.
проиграл
minifyEnabled true
useProguard false
и что бы вы думали? апп падает
Могут.
ага, кидают разработчика который написал норм апп, и нанимают на поддержку индуса за 2$/h
Чет не видал такого, как ты без правил прогварда будешь код обфусцировать?
Мне очень понравилась лирическая часть, особенно про рекламку, какие же имеющиеся решения говно.
В /pr/ в треде борщехлебов.
Тогда уж на Haskell
Запилите перевод, пожалуйста.
тот кто платит твоей маме
Это копия, сохраненная 29 сентября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.