Android Development Thread 2.0.1Обсуждаем разработку под Android, ждём выхода новых Нексусов, смеёмся над седьмым айфоном.FAQ> Хочу вкатиться в разработку под Android!Большинство приложений написано на Java, выучить её на хорошем уровне — это первое, что необходимо сделать. Рекомендуемую литературу см. в Java-треде.После этого можно открыть официальную документацию http://developer.android.com/training/index.html и попробовать создать по туториалам своё первое приложение.В дальнейшем потребуется базовое знание SQL, понимание XML и JSON.> IDE и инструменты?Android Studio — основной инструмент разработчика. Кроме неё потребуется Android SDK (устанавливается вместе со студией).> Мануалы?- Официальная документация: 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.> Есть что-то кроме нативных приложений?- Xamarin — кросс-платформенный фремворк на C#. Представляет из себя обёртку над Android API. Куплено Microsoft. Теперь есть бесплатная версия.- 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/838598.html
>>846981А в чем проблема сидеть с деббагером? Добавил брейкпойнт и всё, уже все значения переменных видишь. Это наоборт быстрее и удобнее, чем писать логи в разных местах, ждать, пока оно две минуты будет перекомпилироваться и перезапускаться.
>>846984Да нахуй твои логи никому не нужны потому что.
>>846986Не люблю F5 кучу раз в цикле жать. Вообще говоря ты прав, если время сборки долгое то да, но с инстант раном это секунды. Но опять же логи запросов-ответов удобней смотреть в логе, так быстрей можно выявить ошибку.
>>846989Тебе не нужны - не пользуйся. Кому-то вон и асинктаски норм.и собаки
>>846996Конкретизируй свое утверждение.
>>846998Уто тебе сказал, что я про стектрейс забываю?
>>846999Твоя мамка.
>>847000Найс аргументы.
>>846999>>847001Я не понимаю.> Нахуя писать значения переменных в лог, когда у тебя есть дебаггер? В случае крэша неверное значение будет в эксепшене.Это твой пост?
>>847002Нет конечно.
>>847001У тебя утечка в классе.
>>847002> Я не понимаю.Это потому, что ты тупой.> Это твой пост? Это мой пост.
>>847014Это дерево создается в Application::onCreate там же где инициализируется крашлитика. И крашлитика и все деревья тимбера умрут с приложением, где утечка?
Использовал кто ? https://atlas.layer.com/android
анончики, как часто вы используете фрагменты и вложенные фрагменты в другие фрагменты в своих приложениях?
>>847250пиздец, если ты не в состояние сделать сам список диалогов и сам диалог + прикрутить gcm, то юзай
>>847293> как часто вы используете фрагментыВсегда.> вложенные фрагменты в другие фрагментыНикогда.
>>847409ViewPager?
>>847293Всегда. Иногда.
Бамп. Спасибо за рабочий роут на pm без пасскода.
Господа, интересует цена вопроса. Суть токова, необходимо запилить калькулятор "товара". Выбираю размерность запроса (метры, дюймы, килограммы, метры) ввожу текущую стоимость за тонну, в итоге получаю общий вес заказа с ценой. Сколько займет перевод экселевской таблички в юзабельный вид и соответственно цена вопроса.
Аноны, а что надо знать, чтобы джуном взялиили хотя бы трейнии?
По каким словам гуглить, как добавить элементам списка действие при его смехивании в бок (по типу как в iOS, где появляется кнопка удаления элемента когда его вбок утягиваешь)
>>847924swipe to dismiss ?
Посоны, я конечно понимаю что фонгап это говно и вообще ни по пацански, но он же не сложный верно? То есть я нормально шарю как что сделать нативно, но не уверен что на фонгапе я смогу это сделать за приемлимое время. Я прав?
>>848013Что значит "нативно"?мимонуфаг
>>848086>НативноДля андроида это подразумевает сделать на языке работающем на JVM - java, scala, kotlin.Для iOS это Objective-C/Swift.Не наивно это всякие ксамарины, фонгапы, реакты, титаниумы и тд.
Вечер добрый, уважаемые. Столкнулся с такой проблемой: есть игрушка на libgdx, и есть admob. Там, как я понял, неск месяцев назад сильно изменился порядок интеграции баннера. Если раньше его можно было инициализировать используя вот такое AdView adView = new AdView(this, AdSize.BANNER, "xxxxxxxx");и поэтому можно было спокойно (как в гайде 2015 года) запихнуть View игрушки и adView в один RelativeLayout.Но теперь же для инициализации необходимо в layout файл какой-нибудь пихнуть описание баннера, потом обязательно инициализировать эту разметку и в ней уже инициализировать баннер, тк там findViewById, для которого необходимо наличие разметки. Собсно, с самой рекламой проблем нет, баннер без проблем выводится (в пустой разметке). Скрестить с игрой так и не получилось. Инициализируется она как-то так: initialize(new Mygame(), config);Кто-нибудь может подсказать, как скрестить ? (у меня прост все менюшки и т д внутри игры, с активностями всякими ничего не делаю)
>>848178>Кто-нибудь может подсказать, как скрестить ? (у У тебя игра в активити или во фрагменте?Можешь перенести во фрагмент, тогда в активити делаешь все с рекламой, а потом вставляешь фрагмент с игрой. Посмотри в сторону плагинов для libGdx. А вообще не верю, что там https://github.com/libgdx/libgdx/wiki/Admob-in-libgdx не все расписано.
>>848182Вот именно там и не расписано. 2 дня уже гуглю, дядь. Там как раз старая инициализация, которая сейчас не работает, на firebase другая показана.
>>848089Благодарю
>>848178Откосить на старые сервисы вместо ебучего файрбейза. Или игру во фрагмент.
String empty = "";(editText.getText().toString().equals(empty)) // возвращает falseАнон как проверить вью на отсутсвие текста? Уже все что мог придумать перепробовал.
>>848226isEmpty
>>846976 (OP)Почему такой пердолинг с SDK? Как это говно поставить? Я блять из мира Java, к пердолингу привычен, спринги там, все дела, но вот уже неделю не могу въехать.Создаю виртуальное устройство, жму на нем Start, вылезает окошко типа starting, бежит прогресс и оно потом закрывается.В Eclipse выходит сообщение unable detect adb version, когда создаю новый проект, вылезает пустое сообщение об ошибке (да, реально пустое окошко).Короче хуйня какая-то, вкатиться не могу, хотел для интереса наваять пару приложений, а инструментария то оказывается еще нет. А Андройду ведь уже не первый и не второй год. М-да, представляю, что делается на устройствах под управлением этой ОС. Теперь понятно, почему люди, чтобы что-то на своем смартфоне сделать, полчаса втыкают и матерятся, я думал это они ламье, а оказалось нет, судя по инструментарию разработчика.Неприятно всем этим удивлен.
Анон, который выкладывал тестовое задание в прошлом треде ты еще тут? Я почти дописал
>>848397Ну ты красава, пользуешься эклипсом, который уже хуй знает сколько не поддерживается и орешь тут про пердолингПОСТАВЬ ANDROID STUDIO МАНЬ она тебе все правильно скачает и нстароит, у тебя какие-то косяки с тулами для дебага.В сравнении с xml конфигурированием спринга, хибернейта и прочего энтерпрайза, разработка на ведро это как прогулка по стране оз
>>848401Всегда тут. Чего хотел-то?
>>848397Ты бы еще в НетБинсе работал, клоун.
>>848401Кинь пик, а то я проебал.
>>848421Посложнее что-нибудь. Второе попробую на котлине ебнуть.
Кстати аноны, можно в дройде что-то типа цветового фильтра для всего view без тантрической ебли реализовать? Хочу сделать в приложении погоды на пике выше, чтобы фрагмент с инфой о погоде слегка затеняло серым, если это прогноз из кеша и он старше чем сутки.
>>848404>>848422Да я пользуюсь эклипсом. И пользовался всегда. И не надо мне тут, это отличная среда, куда как лучше всяких ваших идей, нетбинсов и прочей хуйни.
>>848430>я пользуюсь эклипсомAh you
>>848430Тогда лучше осиль пару абзацев о том как все настроить.
>>848430>И не надо мне тут, это отличная средаМожет быть, но разработка на андройд нормально не поддерживается. Стул конечно сам выбирай, однако я советую студию.Пару лет назад тоже сидел на эклипсах и думал нахуй мне эта студия, но для андройда она лучше. Во всем.
Аноны я тут штуку придумал. Что если сделать так:1) Пилим активити как контейнер для фрагмента2) Пилим из фрагмента view (как в mvp) 3) Вместо презентера у нас астивити.4)???5)PROFIT!
>>848473Ващет из коробки так и предпологается, только MVC и активити в качестве контроллера. Но в активити размазываются всякие говенные байнды к сервисам, onActivityResult, onPermissionRequest и тд. А еще какой-нибудь бродкаст ресивер затесался. И вместо двух хуков - байнда к вью и анбайнда получаешь в ебало кучу onCreate/onStart/onResume/onPause/onStop/onDestroy
>>848424Скидывай свою реализацию, мы же уже обсуждали это.
>>848473> Вместо презентера у нас астивити.Ты изобрел колесо.Вот ты и вернулся к гугловской архитектуре. Активити получается типичным god class, тестировать сложно и т.д.
Есть приложение где навигация сделана при помощи ViewPager.Перелистывание отключено. В одном фрагменте сидит гуглокарта и относительно неспешно грузится. Как бы мне сделать отложенную инициализацию?Хотелось бы вообще отказаться от ViewPager, но чтобы была возможность выбрать - какие фрагменты сразу грузить и прятать, а какие позже.Как такое сделать?
>>848673Гуглокарту можно инициализировать в фоновом потоке. Не помню точно как, но есть способ. Про остальное не понял вопроса, хуйня какая-то.
>>848673Аддишь франменты, но прячещь их.
Вопрос больше по паттернам. Есть Repository, который работает с одним типом объектов. Но сохранять их мне нужно в разных источниках по выбору (в файловой системе, на дропбоксе и т.д.).Каким паттерном правильнее эту ситуацию организовать, если репозиторий предполагает инкапсуляцию выбора источника (т.е. saveFileinYourMomsMouth() нарушает)?
>>848771>в файловой системеЭто значит на телефоне? И что такое дропбокс?мимонюфаг
Недавно взбрело в голову мне, джава-программисту посмотреть что внутре у этих ваших андроид-приложений. Под руку попался "Мой МТС".Залез я внутрь и чёт охуел как-то.Костыль для VCS под названием dummy.txt, в ресурсах плохо ужатые баннеры с фотками в png повторяющиеся по 4 раза на 27 мб в сумме, плюс ещё обрубок какого-то вебсокетного чатика на JS и .swf-ка для него рядом.Поясните, такая небрежность это норма в мобильной разработке? Это важно, потому что если так, то выходит что я охуенный андроид-девелопер.
Аноны, установил студию на диск Д, но она спиздила целых 25 гиг на диске С, это нормально? Можно как-нибудь уменьшить потребление памяти на диске С?
>>848778> Поясните, такая небрежность это норма в мобильной разработке? Create and run an empty activity project in Android Studio and I get a 38 MB folder with 1,175 files. We've just given up on elegance.twitter.com/id_aa_carmack/status/771749108780523520
>>848773Проследуйте в js-тред, пожалуйста.
>>848778> Поясните, такая небрежность это норма в мобильной разработке? Странные у тебя вопросы. Хороших разработчиков в любой сфере мало, хоть в php, хоть в c++.
Аноны, мне надо при старте фрагмента заюзать в нем circular reveal анимацию, но в каком месте мне это делать? сейчас делаю через хэндлер в onViewCreated с задержкой 200, но видно, что это слишком много, как быть?
>>848804Уменьшить задержку.>>848780Открываешь SDK Manager и смотришь, что там за хуйни у тебя понаставлено. Вот тебе в качестве примера пикрилейтед: подхватили SDK, ARM-образ для эмулятора и что-то там для сосни. Так вот: сто процентов у тебя для нескольких версий андроида подхватились эмуляторы, снеси их.
>>848778Написанное студентами за еду 8 лет назад это явно не стандарт. Но говнокода под андроидом действительно море.
>>848804В onResume тащемта например.
>>848811А можно и стоит ли сносить эмуляторы вообще? Я все проги на телефоне тестирую все равно, т.к. на моем компе эмулятор очень медленно работает.
>>848862Сноси все образы тогда. И если студия создала тоже снеси.
>>848773Да, на телефоне. www.dropbox.com
Надоело велосипедить, нужна такая штука чтоб отдал туда Request какой нибудь, она его выполнила в бэкграунде и результаты вернула по слушателю или eventBus. Еще что бы можно было статус реквеста проверять. есть что то похожее?
>>848974rxjavaАноны, хочу сделать список и deteail view чтобы, когда есть место все было на одном экране(дефолтная штука), но при какой ширине такое делать или это надо делать только в лэндскейпе?
>>848976Шта?
>>848977https://material.google.com/layout/responsive-ui.html#responsive-ui-breakpointsбля хорошо, что ты спросил, только щас увидел, что там написано про это, с 600dp надо такое делать
http://4pda.ru/2016/10/01/326066/Это обсуждалось уже?
>>848983Норм, можно будет вкатится и наговнокодить горы.
>>848984да я думаю, для разработчиков ничего не поменяется, и все приложения будут совместимы
Пиздец, ну как этим говном пользоваться? И так еле работает, а после обновления IDE вообще все нахуй сломалось. Теперь даже проект не открывает.
Котаны, как мне сделать чтобы Spinner реагировал на клик по элементу, который уже выбран?Причем с первого раза, т.к. после переопределения метода setSelection только со второго раза клик срабатывает.
>>849032Да нахуй этот android.dsl? И так норм.
Дядечки, выручайте При сборке проекта сами собой в манифест добавляются <android:uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><android:uses-permission android:name="android.permission.READ_PHONE_STATE"/><android:uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>, которые приложению вроде как нахер не нужны. Активити только одно, вот импорты:import android.os.Bundle;import android.os.Message;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.RelativeLayout;import android.os.Handler;import com.badlogic.gdx.backends.android.AndroidApplication;import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;import com.google.android.gms.ads.AdListener;import com.google.android.gms.ads.AdRequest;import com.google.android.gms.ads.AdSize;import com.google.android.gms.ads.AdView;Что именно добавляет разрешения и можно ли от этого избавиться ?
>>849089Уже разобрался, отрубил вручную
>>848983> http://4pda.ru/2016/10/01/326066/> Это обсуждалось уже?Иди нахуй.
>>849095Какой информативный пост.
>>849101Да вы заебали потому что, как белки-истерички на каждую желтую новость реагировать АНДРОИД ВСЁ
Начал изучать разработку на андроид, хотел чисто для себя сделать хеллоуворд, просто активити и 3 таба с иконками. Просто 3 блять таба на пустом активити. С иконками. Больше 100(!!!!!!) строк кода. СТО БЛЯТЬ. ТРИ ТАБА. Делал вот по этому мануалу http://www.androidhive.info/2015/09/android-material-design-working-with-tabs/. Я реально хочу разобраться в этом дерьме, но блять, как вы тут живете-то? У меня пригорело просто пиздец. Неужели нет способа проще?
>>849089С Е Р В И С ЫЕРВИСЫНо это не точно. А еще libGdx потребовался бы, если бы ты пользовался externalFileHandler'ом
>>849167Встречаются два монстра макаронного кода, джава и андроид, а им как раз. Вообще хуевый гайд, добавлять фрагменты в пейджер таким образом.
>>849167Через пару недель пердолинга все устройство ведра будет казаться тебе донельзя логичным.
Посоветуйте плз книгу по андроид разработке
>>849280Да, сейчас уже все не кажется таким нелогичным дерьмом, но все равно смотрится диковато
>>849167>Больше 100(!!!!!!) строк кода. >как вы тут живете-то?На Kotlin/Groovy пишем просто.
Объясните, пожалуйста, почему так сильно смешаны части описания интерфейса на XML-файлах и программная часть? Нет способа просто декларативно описать иконки в табах, а не вставлять их onCreate?
>>849287>почемуПотому что каждаяиконка/тайтл/контент страниц ты получаешь с помощью адаптера, адаптер в иксмельке не создается. Вот и все. С databindg'ом можно извернуться и сделать все это более лаконичным. В xml ты определяешь структуру, наполнение в коде.
>>849287>Нет способа просто декларативно описать иконки в табахНа все подобные вопросы есть один ответ:Делай кастомную View
>>849295как ее делать? мимо нуфаг
>>849286На Хаскелле.
>>849300extends View или extends ViewGroup
>>849300https://developer.android.com/training/custom-views/index.htmlhttps://developer.android.com/guide/topics/ui/custom-components.html
Ребята, помогите отсталому, как этот код реализовать в layout? public static void main(String args[]){ String[] wordList = {"Помидор", "Абрикос", "Авокадо", "Айва", "Ананас", "Апельсин", "Арбуз", "Гранат", "Груша", "Карамбола"}; int Length = wordList.length; int rand = (int) (Math.random() * Length); String phrase = wordList[rand]; System.out.print(phrase); Охота реализовать вывод случайного слова на другом экране при нажатии кнопки. Переход на другой экран при нажатий кнопки разобрался как делать, а как реализовать этот код в андройде не могу понять...
>>849381>Охота реализовать вывод случайного слова на другом экране при нажатии кнопки.Берешь и без задней мысли реализовываешь :3fun <T> Array<T>.random(): T = this[(Math.random() * size).toInt()]
Как перестать говнокодить? Может код ревью платный есть?
>>849409Скидывай свой код в тред, тебя тут бесплатно обосрут как по делу, так и просто так
>>846976 (OP)Кто работает с RxBinding? Мне надо ловить евенты на EditText'е, но так чтобы пропускать первый эмит при создании фрагмента. Юзаю skip(1), но он работает только при первом создании, т.е. если перевернуть экран он не пропускает первый эмит. Как быть? Делаю unsubscribe в onDestroyView, какого хуя он запоминает все эмиты? И да, фрагмент ретеин, если что.
>>849601Почему бы тебе не обсерватории ПОСЛЕ того как ты ставишь свой текст в ручную?
>>849617что?
Если я пройду два курса на Udacity я смогу вкатиться в андроид?Какие плюсы и минусы у такого подхода?
>>849628Зависит от курса, если там мало практики, то он нахуй не нужен.
>>849656Курс от самого гугла, на твитторе посоветовали.
>>849625Ты сказал пропускать эмит при создании, значит если ты подпишешься после, то ты его не получишь.
>>849706в он старте подписываться? че то былокод
>>849710> че то былокодТебе в самый раз.
А хули мы нумерацию проебали ? Давайте может продолжим старую ?
>>849339А лучше что-нибудь более конкретное, чтобы трахаться поменьше. Можешь посмотреть как это деается на примере сэмплов squareup/flow, там будет все довольно понятно с custom view
>>849167А для тебя 100 строк - так много ? В среднем view-компоненте идет 400+ строк, в презентере - почти столько же, в мэнэджере ( читай синглтон модельке ) - под пару кусков. Все это еще без DI с прочими ништяками.
Не обновлял IntelliJ двадцать лет, решил все таки накатить новую версию. И СУКА ЕБУЧИЙ ГРАДЛ ПОРВАЛ МНЕ ЖОПУ НАХУЯ ОН НУЖЕН БЛЯДЬ РАНЬШЕ ЗАЕБИСЬ ВСЕ РАБОТАЛО БЕЗ ЕБЛИ ЩАС ЖЕ КАКОЕТО ГОВНО КАЧАЕТСЯ ПОСЛЕ КАЖДОГО ПУКА БЛЯДЬ СИНХРОНИЗИРУЕТСЯ ПО 5 МИНУТ СУКА АНУС ГОРИТКакая последняя версия IntelliJ без градла, посоны?
>>849922Как ты собрался без грейдла кодить под ведроид? Тут проблема не в грейдле, а плагине который заставляет его часто синкаться, хз как это починить, предлагаю тебе пердолится в виме/саблайме/емаксе с консолькой. Синкаться будет тогда когда нужно.
>>849931Нашел, 2016.1.4 еще без всяких злоебучих градлов работает. Андроид студия говно какое-то, в течение 2х или 3х лет несколько раз пытался с IntelliJ перекатиться, вроде те же яйца но привкус индусского говнеца явственно чувствуется.
>>849979Ну удачной настройки мавена тогда.
>>849979>2016.1.4Некочайте, оно просто старый проект нормально открыло. Пиздец, за что мне всё это.
>>849979>>849922>>848397С какими даунами я сижу в одном треде.
Короче вот, хеловорлд здорового человека и градлозависимого. Автор этих строк стар и ему сложно угнаться за всеми этими хипстерскими веяниями, он не понимает почему нельзя создать хэловорлд без подключения к интернету и почему какая то хуйня перезаписывает поля манифеста.IntelliJ IDEA Community Edition 15.0.6 - мой выбор.
>>850006Правильно, нахуй системы сборки. Это всё от лукавого. Даёшь говнокод.
>>850008Ага, говнокод ведь напрямую зависит от наличия системы сборки.
>>850006И как ты саппорт лайбрари подключать собрался?
>>850013Он там мышкой подключается.
Анон, я нуб в программировании.У меня есть бытовая проблема. Задача - нужен скрипт, чтобы сохранять ссылки в archive.is. т.е. сижу на krautchan.net/catalog/int, вижу трежтред, хочу елл сохранить - я задеждиваю на нем свой палец и во всплывающем окошке(браузер хром на андроиде) выбираю пункт - сохранить скрин той страницы, что по ссылке, в archive.isРельно такой написать? С чего начать? Ч не программист, разве что в школе на бейсике писал.
>>850024Конечно реально, самый сложный момент будет именно в том что бы запихнуть урл им в формочку, не нашел у них вменяемого api. А так сделаешь приложеньку с Activity, которому через intent передается урл, а он дальше в интент сервисе ебет архив что бы тот ссылку сохранил, доступно будет по кнопочке шейр.
>>850028Окей, с чего начатт?
>>850032С джавы
>>850033В смысле подучить язык? Я думал будет инструкция коротенькая как поправить код и добавить пункт в выплывабщем меню и всё
>>850035Может еще сделать все за тебя?
>>850035Ну гугли сэмплы, не такая уникальная задача. Можно посмотреть в сторону js (нет), ибо больше под твои цели подходит
Аноны как пользоватся апи других сервисов? Как это вообще работает? Я думал что мне дадут некие ф-ции для работы с бд, сам доступ к бд, но мне дали пикр. Как подключать это к андроид, что это вообще такое? Где можно почитать о работе с внешними апи, подскажите пожалуйста, и обьясните в двух словах как это работает приблизительно.нуфаг
>>850044>Я думал что мне дадут некие ф-ции для работы с бд, сам доступ к бдА хуев в панамку тебе не напихать? От тебя специально спрятали кишки что бы ты голову не ломал. Гугли что такое REST Api.
>>850048Благодарю.
>>850040>>850038Ну с чего начать? Скачать какую-то программу для влазания в недры приложения гуглхром фор андроид?
>>850057Нет, тебе в хром лезть не нужно. Почитай про Intent, Activity, IntentService.
>>849601бамп
>>846976 (OP)Можно ли использовать DI фреймворки(внедрение зависимостей) для всякого андроидного говна (фрагменты, адаптеры) или их получится заюзать только для моих вспомогательных классов?
>>850192Можно и нужно.
>>850192Нельзя и ненужно.
>>850216Попробовал прикрутить даггер 2. Мне нужно чтоб у меня был синглтоновый адаптер и он инжектился в несколько одинаковых фрагментов, поставил @Singlton везде где только можно, но чет он нихуя не singlton, ЧЯДНТ?
Аноны, помогите с Rx. Кто-нибудь вообще пользуется groupBy?У меня есть ответ от сервера (VKResponse), который может быть либо VKApiPhoto, либо VKError (которая тоже может держать в себе данные, экзепшн и прочие прелести). Хочется чтобы для каждого варианта был сабскрайбер.Все решения, что я видел - подрубают дополнительный Subscriber, внутри которого вытаскивают GroupObservable, и уже там вешают на него "свой" сабскрайбер.Можно ли как-то пилить вне сабскрайберы для каждого GroupObservable?Примерно то, что хочется:....groupBy().subscribeGroup(new Subsciber<Type1>).subscribeGroup(new Subsciber<Type2>)
>>850284В чем проблема работать с VKError в сабскрайберском onError?
Кто знает как сделать, чтобы при нажатии на ImageView она увеличивалась, а при повторном нажатии становилась первоначальных размеров? Может кто какие либы знает для этого?
>>850525> хуита на 5 строчек кода> Может кто какие либы знает для этогоВ жс тред с таким.Вешаешь ебанный клик листнер и делаешь setScale.
>>850531Ты почему такой злой? Как будто сам со сложными задачами никогда не сталкивался. Взял бы да посоветовал либу
Господа, мне требуется ваша помощь. В одном проекте нужно подправить пару строк, но когда я его открыл, то понял, что не могу собрать. Ошибка пикрелейтед, сам с андроидом и gradle, я сталкиваюсь первый раз, пишу говнокод на java, поэтому в упор не могу понять что хочет. Только удалось сообразить, что ему не хватает adnroid () в build.gradle, но вроде в корневой папке эта строка не нужна, да и если добавить будет другая ошибка. Готов даже подкинуть анону на пиво, если кто поможет решить. Можете писать на мыло fakemailprogram@gmail.com
>>850688покажи /app/build.gradle
>>850692Вот он
>>850693Кстати заметил /app/build.gradle вот такую проблему
Кто обещал мне код обосрать?https://codeshare.io/zAnK9
>>850697Ну это я исправил, изменил версию на актуальную, но главной проблемы не решило
>>850701Давай сюда1) Результат gradlew build (или gradlew.bat build)2) Содержимое settings.gradle3) build.gradle всех проектов перечисленных в settings.gradle
>>850699Осталось сделать MVP и подумать над переворотами
>>850738А так норм?На что вообще стоит Rx вешать?
>>850746На хуй.
Я чет так и не понял, 8 джаву можно использовать или нет под андроидом?
>>850718Прикрепляю выхлоп, структуру проекта с нужными файлами залил сюда http://rgho.st/8NvbvFrFR
>>850763Еще вот выхлоп с debug, если будет полезен
>>850746ну из rx биндингов я юзаю только изменения edittext'a. Слушать так клики какая то хуйня, как по мне, т.к. там обычно вызывается метод презентера и намного лучше выглядит упрощенная лямбда, хотя если очень сложный ui, то rx норм
>>850759Байткод 8-й джав - нет.
>>850765Ошибка судя по всему в файле iptv/build.gradle> compile project(':..:ExoPlayer-master:library')Такой проект вообще есть? Он должен лежать в той же папке что и весь проект.
>>848983>>849101Ну вот, презентация прошла. Никакой АНДРОМЕДЫ — УБИЙЦЫ АНДРОЙДА и близко нету. Ссу в рот дауном, распространяющим ссылки на всякое говно.
Ну что, аноны, что скажите про эту ссанину копию гейфона за $1k?
>>850829за 450 купил бы
>>850830ты бы и за собаку купил
>>850825Ты дауненок? Это была презентация новых устройств.Все софтверные нововведения будут на Google IO
>>850699Стоит быть аккуратным с Schedulers.newThread()...
>>850699>>850943Реально, на каждый клик нет необходимости создавать тред Schedulkers.io отлично для запросов в сеть подойдет, а еще если у тебя возникнет ошибка то все завалится, так как в subscribe ты не хендлишь ошибку никак, doOnError ее не остановит.
>>850954>>850943Спасибо.Ты имел в виду что то такое?https://codeshare.io/ezt8h
>>850909А, то есть ты всё ещё АНДРОМЕДЫ ждёшь? Пиздец необитаемые.
>>850971А в чем проблема андромеды? Просто убирают ChromeOS мерджа его с ведром, называют не ведром, а ведромедой.
>>850970Да, в действительности там посложнее првоерка, но так оно хотя бы не упадет с эксепшном.
>>850971> необитаемыеНеобучаемые *Бля, Т9.
>>850976Ты о том что туда в параметре приходит тип эксепшена и надо его нормально обрабатывать?
>>850978Конечно, там может быть ошибка парсинга респонса, отсутствие интернета, несуществующее имя, или просто неверный пароль.
Аноны, подскажите по Rx. Дано: Observable<Boolean> с единственным значением true/false, и два Observable<Integer>. Если первый Observable имеет значение true, то нужно вернуть первый целочисленный Observable, иначе — второй. Кроме того, если в целочисленном Observable встретится число больше 100, то нужно кинуть исключение.Пример 1:Ввод: (true), (6, 11, 15), (10, 350, 98)Вывод: (6, 11, 15)Пример 2:Ввод: (false), (6, 11, 15), (10, 350, 98)Вывод: (10, Exception)Как такое сделать? Вот мой вариант, но он неверно работает в случае truebooleanObservable.flatMap(aBoolean -> aBoolean ? firstIntObservable : secondIntObservable).flatMap(integer -> integer >= 99 ? Observable.just(integer) : Observable.error(new Exception()));
>>850971>А, то есть ты всё ещё АНДРОМЕДЫ ждёшь? В общем нет. Конкретные оси, меня мало интересуют.Я жду Kotlin Native, что бы можно было комфортно кросплатформу разрабатывать.BugVM/RoboVM (открытый форк) и IntelMOE конечно неплохи, но они слабо развиваются.
>>851048Ясно. Всё ещё хуже, чем я предполагал.
>>850982booleanObservable .flatMap { if (it) firstIntObservable else secondIntObservable } .doOnNext { if (it > 100) throw Exception() } // если число больше 100, то нужно кинуть исключение.
>>851058О, точно, так работает. Спасибо.
Аноны, чем отличается Pause и Stop? Тоесть, в каких случаяех приложение паузится, а в каких останавливается?
>>851070Погуглить не пробовал?
>>851083Не смог, спасибо за пик.
Сап, по курсачу нужно написать легковесный клиент для OneNote. Запилил скелет, подключил LiveSdk, доволен жизнью в общем. Вопрос следующий - работал ли кто ? Может есть у кого вменяемые доки по LiveSdk ? А то их сэмпл сам по себе пиздец лютый, да еще и большую часть методом тыка приходится чекать...
Залил наконец приложение погоды для стажировки из прошлого оп треда, сука как же я заебался с разметкой и дизайном, и до сих пор все говно плывет на разных диагоналях и криво смотриться.https://github.com/Compressor/YouOwnForecasterРеквестирую критики у квалифицированных двачедевелоперов и следущее задание у этого >>848421 анона
>>851209>смотрится>следующееГрамманацибыстрофикс
>>id кэмэлкейсом>>логика в адаптере
Анон, я делал http запрос с помощью стринга используя вот этот гайд:https://spring.io/guides/gs/consuming-rest-android/Потом переделал URI запроса на тот, что мне нужен там только не http а https и все крашнулось к хуям. Дело в том что я делал https запрос? Использование библиотеки вообще нормальное дело? Или же лучше просто навернуть гайда от гугла, как я понял там библиотеки не используются: https://developer.android.com/training/building-connectivity.htmlнуфаг
>>851241Спринга*
>>851241Retrofit
>>851209Мы вам перезвоним.
>>850335В том, что VKError не наследуется от Throwable
>>851240>>id кэмэлкейсомВкусовщина>>логика в адаптереЭто да, я так понимаю логику запроса оборачивают в специальный класс и пихают туда все зависимости? Синглтоном хуячить или статик методами?>>851258Предсказуемо
>>851302Почитай про чистую архитектуру, солид.
>>851267Ну так просто кинь исключение, если ошибку вк получаешь.
>>851267Ну так оберни в эксепшон.
>>851240>логика в адаптереА как надо правильно делать? Реализовывать логику в каком-нибудь HuiGovnoAdapterUtils и инжектить его в адаптер?
>>851302Ну в гугловых туториалах кэмэлкейса нет, так что это считай дефолт.
>>851358Адаптер должен делать ровно одну вещь: получать коллекцию объектов и предоставлять её в форме, необходимой для UI (ListView, RecyclerView etc) — адаптировать.
>>851209Заголовки для гит-коммитов надо писать в императиве.
>>851341Так и сделал. Просто сам по себе VKError в себе сожержит кучу всякого говна: HTTPException, или код ошибки вк и т.д.https://github.com/VKCOM/vk-android-sdk/blob/master/vksdk_library/src/main/java/com/vk/sdk/api/VKError.javaХотелось всё это возвращать в onNext отдельного сабскрайбера
>>851258Чому?
>>851409И их должно быть больше пяти
>>851409>>851487Типа вместо added trap feature писать add trap feature, fix allah, add new yoba?>И их должно быть больше пятиЕсли меньше то типа не коммитить? я как то был на курсах в конторе и там советовали коммитить каждый пук, типа один коммит отражает одно логическое изменение.Реквестирую у анонов какую-нибудь ссылку где по хардкору объясняют как лучше работать с гитом, коммитами, когда ветвить проекты и все такое, best practices. В гугле не банили, хочется сразу ультрагодноты.
>>851513http://chris.beams.io/posts/git-commit/
Чем табличку лучше выводить? Через листвью городить? Или есть что-то готовое есть?
>>851516А теперь плиз что-нибудь подобное, но по организации ветвления, и стилю ведения проекта на гитхабе. Можно ли, например, лить неработающий код в пустой репозиторий, в ветку девелопмента, потом дорабатывать и вываливать в мастер?Как организуют это в конторах, где проект начался с нуля?
>>851516Удваиваю>>851552Посмотри git flow и его описания. Даже если не станешь использовать его самого, можно хоть почерпнуть стиль ветвления.
Сап, суть вопроса - мое непонимание работы с OAuth2. Скажем, есть ретрофитовский сервис, берем мы значится, GET метод на определенный адрес, вызываем его, и че дальше, вебвьюха сама появится или нужно чет сделать ?
>>851597Ретрофит сам ничего от запроса не откроет.
>>851209> if (isDay(currentCity.getTime())) drawableID = R.drawable.city_info_background_day;> else drawableID = R.drawable.city_info_background_night;Здесь стоило фигурные скобки заюзать. Не экономь строки. If можно оставлять без фигурных скобок если он совсем короткий и тривиальный, типа if (isImHuitka) cool();Хотя джава код конвеншинс рекомендует вообще никогда не опускать фигурных скобок.
Случайно отправил в старый тред, продублирую сюдаГоспода, как мне динамически подгонять высоту и ширину вьюшки, чтобы она идеально вмещала в себя полученное из интернета изображение? Пикрелейтед то, что у меня выходит и сейчас и то, что я в итоге хочу получить.
>>851903set scale type
>>851679Уже разобрался, сделал все через б-гомерзкий WebView... К слову, что есть ChromeWebView и чем он ништячнее ?
>>852058Ну так ты полагаешься на встроенный в платформу вебвью, может быть забаганым или старым, а так таскаешь свой.
Как в современном ведре делают чаты?Пока приложение видимо свой сокет, когда приложение запаузено - через гугл пуши?
>>851053Хуясно. Kotlin Native разрабатывается. Правда, непонятно, хули с этого толку для андроида.мимодругой
>>852093>хули с этого толку для андроидаОколонулевой, что-то уровня HaskellActivity, только на котлине.
>>852092есть такая штука классная - Atlas SDK и Layer SDK, погугли. Мы сейчас ее используем в проекте
>>852114Нет необходимости в каких-то ссаных вьюшках или штуки которая прячет от меня нутро чата. Я просто хочу узнать правильный ли это (сокет в сервисе пока система не грохнет, а потом на пушах) подход?
>>852117лучше вместо пуша сокет с sticky сервисе держать, как по мне...
>>852120Оно-то может и лучше. Но Doze прихлопнет его.
>>852117А почему тогда не сразу на пушах?
Смотрю гитхабы, и замечаю, что многие девелоперы хуярят кучу интерфейсов и абстрактных классов в своих проектах, и оперируют абстракциями. Это нормально, что я пишу обычный код с зависимостями на классах - а уже потом хуярю под всё это интерфейсы, и выношу общую логику?
>>852182Нет.>>852171Многа пушей будет. Да там не только сообщения, через те же сокеты гоняется звук и видео, фотки.
>>852182Пофиг, пока ты нюфаг, тебя ничто не спасет, ты же не понимаешь сути "зачем это делают". Даже если ты будешь все делать через интерфейсы - у тебя все равно в итоге будут макароны.Тут нужно подходить с более высокого уровня.Читай книги (смотри youtube) на тему проектированию архитектуры, DDD, UsecaseDD.
>>851950С этим параметром я возился, он не дает нужного эффекта. В итоге мне помогло поставить android:adjustViewBounds="true" в самом имейджвью.
>>852200Херово ты возился, centerInside и все.
Аноны доставьте понятных и непротухших гайдов по ретрофит, плес.
>>852222https://futurestud.io/tutorials/retrofit-getting-started-and-android-client
>>852225Спасибо
>>852196Проблема то в другом. Я понимаю зачем это нужно, и не совсем уж ньюфаг, есть пара месяцев работа с AbstractSingletonProxyFactory.И если на серверке легко построить зависимости на абстракциях - то тут это сделать сложнее. Я просто не могу сходу нахуярить все нужные методы и типы данных, с которыми они будут взаимодействовать. Когда начинаю писать код - выясняется, что хуйня икс внутри метода реализуется с некоторыми нюансами, а метод лучше сделать слегка другим.
>>852236Держи нас в курсе.
>>852107Я и говорю: Kotlin Native делается, но не для андроида.
>>852274Для платформы хачкела пишешь?Транслируешь javakotlin код в монады?
>>852236>Я просто не могу сходу нахуярить все нужные методы и типы данныхДа не садись ты сразу код писать - спроектируй на бумажке, определи доменную модель.>Когда начинаю писать код - выясняется, что хуйня икс внутри метода реализуется с некоторыми нюансами,Если проектируешь сверху вниз, с учетом "инверсии зависимостей", то выясняется что проблемы кода на низком уровне не должны затрагивать высокоуровневый код и его можно потом менять не перехреначивая весь проект.Совет: представь что тебе наняли фрилансером и просят "оценить сколько займет реализация приложения?".- Можешь ли без закладывания огромных рисков определить затраты в чел/днях? - Можешь ли ты разбить на подзадачи для других разработчиков?- Нет ли НЕясных моментов в реализации чего либо (возможно стоит написать тестовый код/тесты)?Если не можешь ответить на эти вопросы утвердительно, значит еще рано писать код.=== ВАРИАНТ 2 ===Попробуй TDDВот посмотри это видео https://www.youtube.com/watch?v=8u6_hctdhqI
>>852328Хули ты всё умничаешь? Сука, ты че, пидор?
>>852356Нет, я просто люблю на Kotlin программировать :3
>>852366Чем дольше живу, тем больше убеждаюсь в том, что на Котлине одни дауны программируют.
>>852371И много ты знаешь таких людей?
>>852403Я знаю много таких. Но не людей.
Как это не смешно звучит но мне что-то совсем андроид перестал нравиться. Причем как api так и сами телефоны. Не нравится этот глючный тормозной интерфейс, подлагивания, зависания, не нравится написанное индусней api, уже и так сижу на макбуке, поэтому куплю седьмой айфончик и буду радоваться жизни. Но все равно буду продолжать писать под говноид, (быдлу ведь тоже нужны приложения), да и больше ничего я не умею кодить кроме него, а сам для себя как господь буду пользоваться божественной iOS
>>852416Держи нас в курсе.
>>852426Ну а что не так что ли? Или ты не замечал что на андроид ВСЕГДА эстимейты выше в 1.3-1.5 раза?
>>852431Я к тому, что всем похуй, что тебе там перестало нравиться и что ты будешь делать.
>>852433>покпокпок Было бы похуй ты бы мне не отвечал, а так у нас тут джентльменский клуб андроид разработчиков, травим свои байки про андродовское житье-бытье, поэтому мой жжшечный пост вполне к месту.
>>849381> андройде > йУ вас тут за такое не отправляют на парашу что ли?
>>852646Адекватные аноны его просто проигнорировали, один лишь котлинодаун выскочил. Но его не надо на парашу, его и так жалко.
Сап, андроидо-боги. Прочитал Head First Android, сейчас прохожу курс на udacity с погодным приложением. Куда двигаться дальше? Хочется услышать мнение опытных анонов.
>>852366Дай пять, бро.>>852371Пшол вон, ретроград.
>>852646>У вас тут за такое не отправляют на парашу что ли?Да всем похуй, кроме неадеквата который сажей отвечает и агрится на всех видимо девочки не дают.
Что происходит с асинхронными задачами (выборка из SQLite DB, запрос к REST API), когда:1) пользователь сворачивает приложение?2) убивает приложение через диспетчер?
>>8527681) ничего, они продолжаются2) убиваются вместе с процессомА ты что ожидал?
>>852775Спасибо, анон!
После вызова finish в активити, если запустить эту активити снова при помощи startActivity до вызова onDestroy что произойдет:1) onCreate вызовется2) не вызовется и всё пойдет по пизде
>>853481> запустить эту активити снова при помощи startActivityТы не сможешь запустить эту активити. Будет создан новый экземпляр. Соответственно, первый вариант, всё ок.
>>852768>>853481Это какие-то вопросы с собеседования или что?
>>853510Нет
>>853544Пидора ответ.
>>853506>>853481Да я баг словил странный:1) В onCreate активити #1 запускается сервис и биндится2) По нажатию кнопки стопается сервис, вызывается finish, в onDestroy unbind вызывается, вызывается startactivity #23) Юзер возвращается на активити #1 через startActivity3) В итоге ссылка на сервис = null. Сервис забиндился и в этот момент уничтожился? Что это было?Причем такой баг очень сложно словить.
>>853573с чего ты взял, что он забиндился?BIND_AUTO_CREATE юзаешь?
>>853589У меня всё остальное (фрагменты, разметка) грузятся после того, как забиндился сервис, т.к. им нужна ссыль на сервис.Использую BIND_IMPORTANT, т.к. сервис у меня foreground и BIND_AUTO_CREATE приводит к убийству сервиса сисиемой через некоооое время, это недокументированная вещь, но так оно и есть.
>>853599Про foreground service и BIND_IMPORTANT: http://stackoverflow.com/questions/6645193/foreground-service-being-killed-by-android
>>852328>Попробуй TDDМне больше SODD по душе.
>>850254Покажи свой код, тебе скажу куда тебе надо синглтон воткнуть
>>853738А мне FNTRB.
>>853738>Мне больше SODD по душе.Тогда советую книгу пикрил
>>853771Спасибо, она была нужна когда я писал автоматический парсер SO, теперь парсер сам пишет мне код с SO
Уже как 6 лет хуярю на дотнетике. Всегда интересовала разработка под мобилки. Поясните за Xamarin. Достойная замена ванильке? Или лучше все равно осилить жабу со всем вытекающим?
>>853808Приложения, написанные на Xamarin, выглядят, как хуй, а внутри них вечно что-то отваливается.Лучше всего попробуй написать на досуге приложение из пары страничек, сам всё увидишь. Желательно также позапускать на устройствах под разными осями. И да, мак с XCode, как и аккаунт Apple-разработчика, всё равно понадобится.
>>853811Насколько я знаю, там есть 2 метода разработки: Xamarin Forms, где интерфейс ресуется через Xaml, и делается билд под все оси сразу. Xamarin for android/ios, где разрабатываешь так же, как и под соответствующую ось (фреймворк и гуй), просто юзаешь шарпик, вместо жабы или objective/c.Собственно, если буду что-то пилить, то наверна буду осваивать второй метод, т.к. в первом слишком много всего обобщено, что выльется в пиздец при каштомизации.
>>853808Если для себя - то вообще похуй, хоть на хаскеле, но работку по замарину хуй найдешь.Да я тебе советую все таки яву, язык за часа 2 осилишь, только первый месяц блевать будешь от осознания того, что вернулся в шарп года 2003.
>>853828Да на язык мне похуй тащемта. Все дело в местных фреймворках, которые описаны в шапке.
>>853808Xamarin.Form для кросплатформыXamarin.Native если только Android>>853811>выглядят, как хуй, а внутри них вечно что-то отваливаетсяХуйня, все выглядит нативно, все баги пофикшеы годы назад.XCode - нужен только если будешь под iOS кодить.Платный Apple-акк не нужен для тестирования на девайсах, а только если хочешь поделится бинарником с друзьями.>>853828>но работку по замарину хуй найдешь.Нормально с работой (если живешь не в зажопинске)>Да я тебе советую все таки явуЕсли знаешь C# -> бери Kotlin, это почти как шарп, но компилируется в java-байткод.
Как на НЕ рутованном смартфоне имитировать убийство сервиса системой и перезапуск?Помню был какой-то способ...
>>853867Через adb shell.http://stackoverflow.com/questions/7415997/how-to-start-and-stop-android-service-from-a-adb-shell
>>853867Напиши сам, тыжпрограммист.
>>853878Нужен root
>>853885>>853878root не нужен, тут рестарт не имитируется, а только стоп.
>>853867В настройках открой список работающих приложений, найди своё, останови сервис.
>>853888В списке работающих приложений сервиса нет.
>>853897Значит, он просто забинден. Если сервис был запущен биндингом, а не через startService — сервис не считается запущенным.
У меня есть 3 Observable:1) Чтение данных с базы2) Загрузка данных через api3) Флаг для загрузки данных через api (если true то данные грузятся с api)Как мне сделать так что бы если флаг был true, то данные грузились с сети, а при ошибке и флаг == false с бд.
>>853833Ой, не пизди.
>>853914Через флаг решать, откуда грузить данные - плохая идея. А вообще flag .flatMap(aBoolean? networkObs : dbObs);
>>853921Такое тз, что поделать.реально чекбокс в настройках
>>853914 return flagRx.flatMap { if (!it) dbRx else netRx.onErrorResumeNext { dbRx } }Что-то мне кажется ты хрень делаешь.
>>853925Да говорю же в тз так. Вот прям цитата:Добавить в настройках чекбокс "Хранить настройки на сервере"При снятом чекбоксе хранить локально
>>853926A RX использовать тоже написано в ТЗ?И биз. логика должна обязательно через RX идти?
>>853927Нет, а в чем проблема?
>>853923Я бы в любом случае локально писал, а словив обновление в базе, если флаг стоит то отправлял на сервак.
>>853928>Нет, а в чем проблема?Ты все переусложняешь и зацикливаешся на молотке (RX) когда надо "закрутить шуруп".
>>853941Если у него реактивные шурупы, то и закручивать их нужно рективным шуруповертом.
>>853943У него бизнес-логика и представление в кашу смешано.
>>853950Я позже код вкину, благо это не секрет.
>>853833> Xamarin.Native если только AndroidЕсли только Android, то Xamarin нахуй не нужен.> Хуйня, все выглядит нативно, все баги пофикшеы годы назад.Ага, очень нативно, особенно учитывая, что традиции и гаедлайны UI везде разные. Получается что-то вроде приложения бургер кинга: пользоваться и продавать приложение можно, но если это приложение бургер кинга.> Платный Apple-акк не нужен для тестирования на девайсах, а только если хочешь поделится бинарником с друзьями.Окей, не нужен. Но XCode для этого нужен всё равно, а бесплатного не получится протестировать уведомления и не только.> Если знаешь C# -> бери Kotlin, это почти как шарп, но компилируется в java-байткод.А вот тут поддвачну. На котлине получишь нативную разработку в очень хорошей среде (Android Studio) и современный синтаксис, а не джаву.
>>853994Вот этот прав по всем пунктам, кроме последнего.Если ты только вкатываешься в андроид-дев, то котлин тебе нахуй не нужен. Модный, стильный, молодежный синтаксис будет лишь способствовать образованию говна, вместо архитектуры. Котлин — хороший язык, но лишь в руках опытных разработчиков, знающих костыли android sdk, умеющих в архитектуру и тестирование.
Мне тут коллега сказал, что AsyncTask устарел и его нельзя использовать, но не смог пояснить почему. Так в чем же недостатки AsyncTask?
>>854021Говяность кода прямопропорциональна количеству асинктасков в нём, такие дела.
Ананасы, есть LinearLayout в нем три FrameLayout в которых лежат фрагменты. Как сделать чтобы FrameLayout занимали одинаковое место на экране по ширине? layout_weight вообще ему допизды, растягивает средний фрагмент почти до краёв.
>>854008А еще байтоёбство в Котлине просто ад. В жабе еще терпимо, но котлиновские массивы + дрочево байтов = хуй пойми что, дропнул Котлин из-за этого.
>>854008Хуёв с Android SDK анон и так насосётся, не думаю, что котлин сильно усложнит вкатывание или разбалует его. Наоборот, говнокода меньше будет (потому что вообще кода меньше будет).
>>854054Можешь привести пример?
>>854028>Выносим асинктаски в модеь>Дергаем методы презентора>Всё пучком
>>854069Ебнутый? Ты вообще понимаешь, что такое модель?
>>854091Уроки сделал, маня?
>>854048>layout_weight вообще ему допиздыЧто-то ты не правильно делаешь значит.>>854021Ебешься с колбеками, а еще не забудь все эти колбеки отменить. Неудобный апи вообщем.
>>854048Percent support library
>>854092Что и требовалось доказать.
>>854069> 2016> Засорять бизнес логику классами из Android APIБери compat CompletableFuture и погрузись в мир трансформации кода с Kotlin-async/await
>>854093> Что-то ты не правильно делаешь значит.> 0dpНе знал, что так надо. Думал он при layout_weight игнорирует ширину, а на деле рандомная хуйня получается после запуска, хоть и в студии все ровно.
>>854091>>854092Источник данных.Запросил у модели свежий пак фуррятинки - она тебе его вернула.
>>854106Студия это вроде подсвечивает.
>>854093>не забудь все эти колбеки отменитьЭто когда у нас юзер закрыл приложение, а AsyncTask там еще что-то вычисляет, а потом закончило вычислять и ОПА! NULL POINTER EXCEPTION или что?
>>854111Хранит неявную ссылку на активити. Неудобное АПИ из трех методов. Сложное управление потоками.
>>854110Нет. И самое главное layout_weight работает, студия молчит и показывает в визуальном редакторе ширину как надо, а после запуска на устройстве пидорасит как захочет.
>>854114Где там неявная ссылка?
>>854118Ты когда делаешь анонимный класс, хранишь неявную ссылку на объект в котором создаешь объект анонимного класса.
>>854021http://blog.danlew.net/2014/06/21/the-hidden-pitfalls-of-asynctask/
>>854102Иди нахуй со своим котилином.
>>854102Как ты свою async await лапшу тестировать будешь?
>>854127Так же как и на C# async/await тестирую.А в чем конкретно проблемы?
>>854048> layout_weight вообще ему допиздыlayout_width в 0 поставь
>>854106> Не знал, что так надо. Думал он при layout_weight игнорирует ширинуНет. Причём я так и не нашёл документации по значению этого поля при установленном layout _weight, а оно таки что-то меняет.
>>854102Ну вот нахуя тебе этот асинк авейт? Ну как ты ему будешь назначать тред на котором работать, лично мне эта штука кажется менее читабельной чем то что есть сейчас или лямбда.
Какого хуя это гуглоговно пиздит? Все есть и прекрасно пашет. Как наебать эту индусоподелку для быдла? Запускать дизассемблер, искать место проверки и патчить? Есть еще варианты? В принципе не проблема и телефон подключить, но какого хуя.
>>854162Проц в студию!
>>854162Установи HAXM стэндолоном, если оно говорит что нет, значит нет. Возможно ты запретил в биосе.
>>854133> Так же как и на C# async/await тестирую.То есть, никак?
>>854148Ну просто КОТЛИН удобный он позволнте ьисать меньше кода и он ккрасвый очень нравится почти нкак сишарп, а джава уродливая старая, так что ты неправ.
>>854179>>854148>>854102Расскажите вкратце, что это за CompletableFuture и зачем?
>>854182Observable для бедных. Не нужен.
>>854182Что бы удобно работать с асинхронными задачами. https://dzone.com/articles/java-8-completablefuture>>854181Я не против котлина, мне он даже нравится, но асинк/авейт малополезная на мой взгляд штука, которая только мешает.
>>854193> Что бы удобно работать с асинхронными задачамиНу говорю же, Observable для бедных.Про асинк/авейт согласен. Способствует образованию говнокода, сложно тестировать и дебажить.
>>854197>Ну говорю же, Observable для бедных.Зато изкаробки.
>>854200На андроиде-то? Нихуя. Даже в Retrolambda нет ни CompletableFuture, ни Streams.Вообще, изкаробки — это слабый аргумент. AsyncTask, Handler и HttpURLConnection тоже из коробки. Предлагаешь использовать?
>>854209> Вообще, изкаробки — это слабый аргумент. AsyncTask, Handler и HttpURLConnection тоже из коробки. Предлагаешь использовать?А в чём проблема с ними? Особенно с Handler.
>>854212Ну напиши мне код, который в ui-потоке будет следить за изменениями EditText'а, не чаще чем раз в 0.5 сек делать в фоновом потоке запрос на сервер, а потом показывать результаты в списке (снова ui-тред). Используй только перечисление классы. Не забудь про то, что нужно пережить пересоздание активити. Как будешь готов, я покажу тебе свой вариант на Rx, сравним код и обсудим, в чем же проблема.
>>854214+ забыл упомянуть обкатку ошибок и показ индикатора загрузки.
>>854214Тратить время на написание кода я не стану, учись нормально изъясняться. К тому же не вижу ничего сложного а твоей задаче, легко решается этим набором классов.
>>854220Ты реально тупой или троллишь так?
>>854209>На андроиде-то? Нихуя.Я говорил не конкретно про ведро. Хотя есть всякие гуавы. И да, для своего времени вышеупомянутые классы были конфеткой.
>>854221Круто ты диалог ведёшь.
>>854222Про не конкретно ведро иди в java-тред. Конфеткой они никогда не были, но раньше альтернатив особо не было. Теперь есть, и много, так зачем продолжать грызть кактус? >>854223Слив засчитан.
>>854226> Слив засчитан.Ты знаешь, когда эта фраза употребляется вообще? Я ей же тебе могу на >>854221 ответить, где ты с темы на личности перешёл. И ещё хватает наглости меня при этом тупым называть, поразительно.
>>854230У тебя очень смешно горит жопа. Люблю такое.
>>854232На сосач, быдло.
>>854234В js-тред, макака.
>>854182>Расскажите вкратце, что это за CompletableFuture и зачем?Вот это жесть, бедные вы мои android разработчики,больно смотреть как вас стороной обошли JAVA 7 и 8И плаваете вы постоянно в 2006 году и Android костылях.И главное вас даже лечится не хотите и вас все устраивает.
>>854197Расскажи где ты его хоть использовал и какой у тебя опыт (или ты теоретик)
>>854240> подразумевая, что андроид разработка — не макакинг
>>854250> подразумевая, что под андроид пишут только REST-порашу
>>854179>То есть, никак?Конкретно в Kotlin async/await метод обычно возвращает CompletableFuture, у которого можно всегда вызвать join() или get() для получения результата.======================================================================================================================================RX сам по себе полезен (не зря его добавили в Java 9) и его можно и нужно применять для "рекативных потоков данных".Вот только RX хреново ложится на НЕлинейные потоки управления (if-else, for).В таких случаях как раз для простоты больше подходят async/await,тк они позволяют писать простой императивный код, как будто без асинхронности.Не нужно зацикливаться на одном подходе, их нужно комбинировать, для получения простого и поддерживаемого кода.======================================================================================================================================У меня кстати есть теория насчет RX + Android UI, может я как нибудь потом ее расскажу.
>>854255Так ты предлагаешь рест парашу писать в качестве примера, лол.Впрочем, рест параша — 99% рынка андроид приложений, игры не в счёт. Так-то и на жс можно не рест парашу писать.
>>854260> ты предлагаешь Я мимокрок, я ничего тебе не предлагаю> на жс можно не рест парашу писатьЗдесь уже была паста, про будущее, где Линукс переписан на жс, но мне лень её искать.
>>854106Наверни ConstraintLayout
>>854334Говна наверни, оно даже не бета.
>>850667Какого хуя этот даун ещё не забанен?
Подскажите, есть ли возможность сменить лого приложения в гугл плей, не перезагружая apk?
Сап двощ, подскажи что можно выбрать в качестве темы магистерской диссертации? Хочу написать какую-нибудь апликуху, но не знаю какую именно
Есть ли в android стандартные средства для создания интерфейсов, которые масштабируются под размер экрана?Пример на пикреле.
>>854402нет>>854404>выбрать в качестве темы магистерской диссертацииТы тредом ошибся, тебе сюда >>827944 (OP)>>854413Ну так используй еболу с картинки https://github.com/intuit/sdpили PercentRelativeLayout из supportеще в манифесте можно поиграть с <supports-screens>раньше можно было как-то настроить что бы на планшетах растягивалсяА вообще - ты хуйню сделать хочешь
>>854428>А вообще - ты хуйню сделать хочешьОх уж этот двач. Наберешься опыта - поймешь.
Как вы храните константы, которые должны быть уникальными в рамках проекта, но не дожны никак меняться от конфига системы (пример - айдишники лоадеров для одного активити, всякие ключи для bundle и т.д.) - тоже в XML, или в коде?
Сап, котаны, тут такая тема - если мне заплатили аванс и я сделал почти что все, но из-за затупки чувака на бэкэнде мне уже тошно становится работать, то я с юридической точки буду прав, если съебу извинившись перед заказчиком и описав ситуацию, мол работать больше с такими пидорками не могу, но тип за проделанную работу аванс мне остается ? Или таки могут засудить ?
>>854462когда как, если то какие-то ключи api, то в ресурсах, если же ключи бандлов, преференсов и пр, то в констант-классах
>>854462Можно в ресурсах как id, если их не много, то можешь в BuildConfig. А вообще можно и просто в файлике Constants.java, хотя это грязновато.
Аноны делаю запрос c помощью rx, он может делаться долго, если в это время перейду на другой экран и начну другой запрос, то он будет ждать пока тот завершиться и только потом начнет выполняться. Делаю все в Schedulers.io, как исправить?
>>854479В смысле тошно? Ты получил половину в авансе или сколько? Если ты проделал больше половины работы то и требуй столько сколкьо сделал. Вообще лучше сначала поговорить и описать ситуацию, бекендшик тупит что ли и от этого сроки тянуться, сади их на счетчик лол, или ты не по часам? Просто помахать ручкой будет не очень, но если там мудаки то тогда это вариант.
>>854485Делать на другом шедулере. А возможно втою долгую задачу стоит делать на отдельном треде/экзекюторе.
>>854495Да это не долгие задачи, обычные запросы, просто иногда они выполняется секунд 10
Немного бугурта с заказчиков:"Нужно сделать vo-ip шлюз, похуй что завязано на железо и будет работать на 3-х рутованных смартфонах. Сроки 18 дней, 30 000 р. Нет, смартфон-нейм доя тестировпния не дадим."
>854552>30 000 рЗачем фрилансить в фантиках? Как тебя ещё не попросили сделать ИНТЕРНЕТ-МАГАЗИН С ЭТИМ ШЛЮЗОМ ЗА 5 КИЛОРУБЛЕЙ
>>852673
>>854493>Делаю все в Schedulers.io>он будет ждать пока тот завершитьсяТы что-то неправильно делаешь Schedulers.io() мультипоточныйКакая версия RX?
Это >>854560 сюда >>854485
>>854556Один раз засветил почту - и понеслась.
>>854572Приямо на почту шлют заказы? Сколько лет опыта? Много приложентй в сторе?
>>854629Такую хуйню шлют всем, кто засветит почту на тематическом форуме.
>>854629Год опыта и два приложения.
>>8545601.1.6
Анончики, а как в выполнить два запроса на сервер параллельно, используя Retrofit и RxJava?
>>854690merge
>>854690А мог бы не ебать себе голову и запустить 2 асинктаска на многопоточном пуле.
Мейлачеры, есть один ListView, у элементы которого включают в себя несколько чекбоксов. При нажатии на любой из этих чекбоксов нужно делать запрос к бд, изменяя состояние соответсвующего чекбокса для соответствующей записи. Думаю запилить Executor, но создавать новый тред на каждый клик по чекбоксу как-то не хочется, ибо клики могут происходить очень часто. Можно ли как-то создать один общий тред по работе с бд и докидывать в него запросы, которые он будет один за другим выполнять?
>>854694Смешно.
>>854704RxJava -> Shedulers.io
>>854704> один общий тред по работе с бд и докидывать в него запросы, которые он будет один за другим выполнятьА что будет, если один из запросов не выполнится? Рассинхрон?
>>854552Может нахуй их? Сомнительно что ты упсеешь.
>>854709Да, будет рассинхрон. Еще можно в onDestroy проводить запись в бд, но мне кажется что тут тоже есть подводные камни
>>854707ИО – тредпул, который никак не ограничен и создаст тебе поток на каждый параллельный вызов. Я проебался один раз и разогнал его до 300 потоков.
>>854693merge не подходит, так как требует, чтобы данные в Observable были одного типа.
>>854694Согласен.
>>854746zip
>>854719А есть вообще ограниченный тредпул в Rx, где в случае его заполнения входные потоки будут ждать? Допустим, у меня хуйня подгружается во вьюхолдеры при их появлении, а ресайклервью хуярит по 30 элементов списка.
>>854791Schedulers.from(Executors.newFixedThreadPool (...))
Хочу вкатиться к вам, но мак не видит мой телефон и андроид студио не дает запустить тестовое приложение. Чо делать?
Поясните: если у меня на событие вью не должно идти никаких запросов к серверу, и все действия только внутри вьюхи (пример - нажатие на закрытие диалога) - нужно вызывать презентер?
>>854791computation ограничен 4 потоками.
>>854824https://developer.android.com/studio/run/win-usb.html
>>854694Но ведь если всё правильно делать, то в асинктаске даже память не утекает и вообще.Так что вполне себе вариант.
>>854866>мак>win-usb.html
>>854881Про макось там тоже есть пара слов.
С новым обновлением начала вываливаться ошибка при сборке:Error:Error converting bytecode to dex:Cause: Dex cannot parse version 52 byte code.This is caused by library dependencies that have been compiled using Java 8 or above.If you are using the 'java' gradle plugin in a library submodule add targetCompatibility = '1.7'sourceCompatibility = '1.7'to that submodule's build.gradle file.Error:1 error; abortingError:Execution failed for task ':app:transformClassesWithDexForDebug'.> com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Return code 1 for dex process
>>854923Разобрался.
Как в 2016-м лучше всего реализовать аутентификацию по OAuth? Вручную с помощью Retrofit и RxJava? Использовать какую-то стороннюю библиотеку?
>>854824adb-то работает?
>>854997>Как в 2016-м лучше всего реализовать аутентификацию по OAuthKotlin + NIO.2 + java.util.concurrent.Flow.Subscribermimo Jake Warton
>>855181Но он уже активно обмазывается rxjava 2.0, а не твоей жава9парашей.
>>855181А кто-нибудь не из клоунов мне ответит?
>>855290Так же как и в 2015 хватит справшивать хуйню
>>855313Спросил тебе за щеку. Проверяй.
>>854997Просто берешь и без задней мысли реализовываешь
Анон, как сделать лист активити, который будет отображать N айтемов и когда пользователь доскроливает до последнего - загружаются еще N айтемов?
>>855460RecyclerView + custom OnScrollListener
>>855181Признай, ты просто всрат и тебе не дают тян - поэтому пишешь на котлине
>>855468Признал тебе за щеку. Проверяй.
Когда изменения в SQLite базе записываются на диск при выполнении insert?
>>855496Перед завершением транзакции.
Анон, как можно посмотреть запрос, который я посылаю? Использую ретрофит и не могу найти ошибку, "if (response.isSuccessful())" получается false все время. нуфаг
>>855539https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor
>>855539При создании укажи кастомный OkHttpClient, которому при создании прицепил HttpLoggingInterceptor с нужным тебе уровнем логов.http://stackoverflow.com/questions/32514410/logging-with-retrofit-2
>>855566О, спасибо
Мне тут LeakCanary говорит, что память утекает.Но на MainActivity нету ListView.Что это за нахрен такой?
>>855570Делай дамп памяти, ищи хули. там не было случайно попапов со списками?
>>855579Там только ViewPager в котором есть фрагмент со spinner'ом.
>>855581Я не уверен, но вдруг в спиннере листвьюха?
Сап двачСлучилась беда. Телефон пошёл по пизде и я хочу перенести все на пеку, но для это нужно разблокировать экран. Этого я сделать не могу, ибо он в говно. Что делать? Как обойти блокировку ведра и сохранить данные?
Разобрался с логами, спасибо анон, полезная фича. Но не понимаю проблему, вот такой запрос я отправляю:https://eu.api.battle.net/sc2/profile/1308689/2/NukeLar/?locale=en_GB&apikey=9rkptd2y6ywe4xn8j859yxm8arg8cb3mА вот такой отправляетсяhttps://eu.api.battle.net/sc2/profile/1308689/2/NukeLar/%3Flocale=en_GB&apikey=9rkptd2y6ywe4xn8j859yxm8arg8cb3mТоесть вместо "?" отправляется "%3F":Я так понимаю проблема в кодировке? Как это можно исправить?
>>855468>ты просто всрат и тебе не дают тян - поэтому пишешь на котлинеДа ты охуел поц, посмотри какой у меня причесон :3А если серьезно - он сам давно пишет на Котлине.И в slack #kotlin постоянно тусуется и всем отвечает (мне тоже помог с одним вопросом).
>>855602Добавлю: если вписать локаль и ключ напрямую то все работает, а если через @query или @path - ошибка с %3f
Котаны, где искать интересные проекты на андроид?К примеру связанные с BLE гаджетами/обработкой изображений и т.д.? На русских фриланс биржах весьма кисло.
>>855602А apikey так в открытую норм постить?
>>855629Не знаю, а не стоит? на всякий случай удалил и создал новый
>>855591Съеби в /mobi/.
>>855619О, лол, у меня две ровно такие штуки валяются, всё ленюсь сделать их них маячки.
>>855616> он сам давно пишет на КотлинеЕму можно, он знает, что делает.А тебе нельзя, ты тупой двачер-котлинодаун.
Как програмно изменить картинку для ImageView?
>>855666Glide.with(imageView).load("https://pp.vk.me/c407720/v407720160/7732/WQey8mzdD-Q.jpg");
>>855665
Проебался я по делам.>>855003Что это? Android file transfer пробовал юзать - ни в какую, ничего не помогает. Ни режим разработчика, ни режим фотоаппарата. Телефон сасунг s7.>>854866> If you're developing on Mac OS X or Linux, then you do not need to install a USB driver.
>>855665>>855468>>855290>>854125Как же у местных манек подгорает с котлина. Шо такое? Досадуете, что нормальные люди пишут на новом языке, где не нужны ваши костыльные извращения на недоджаве?
>>855714Котлин заебись. Заебали долбоебы вроде тебя, которые при любом удобном случае форсят его, абсолютно не понимая, нужен он тут или нет, игнорируя все другие аспекты и ориентируясь лишь на стильный модный молодёжный синтаксис.
>>855003Хуйнул этот адб и заработало. Можно, вкратце, что это? А то 3 ночи, уже не могу вдумываться
>>855720Ты промахнулся. Я не форсирую котлин, я лишь говорю, что вижу в треде много хейтерства в адрес котлина.Ясное дело, что не надо к проекту, существующему и большому, прикручивать котлин ради одной плюшки.
>>855728Advanced Database Boot, без него ты не сможешь в своих приложениях базы данных использовать. Проверь, стоит ли у тебя SQLite и PostgreSQL на маке?
>>855729> Ты промахнулся. Я не форсирую котлин, я лишь говорю, что вижу в треде много хейтерства в адрес котлина.В ответ на >>855181 нет хейтерства котлина, исключительно презрение к форсеру.
>>855730Ты ебанутый?>>855728Android debug bridge.
Анон, как к айтемам спинера прикрутить пикчу?
>>855570>>855579>>855581>>855586Утекает список в android.support.v4.preference.PreferenceFragment
>>855854Вот хуйня, интересно какого хуя. Фргамент-то отцепливается от активити, а вьюхи от фрагмента, или там какой-то изврат?
>>855859Хз что там внутрях. Этот фрагмент из библиотеки: https://github.com/kolavar/android-support-v4-preferencefragmentСейчас я ради интереса взял вместо него PreferenceFragmentCompat:https://developer.android.com/reference/android/support/v7/preference/PreferenceFragmentCompat.htmlИ вот результат. Теперь Recycler течёт.
>>855876> Этот фрагмент из библиотеки: https://github.com/kolavar/android-support-v4-preferencefragmentБлядь, зачем тебе эта васяноподелка?
>>855878Тогда не было PreferenceCompat и он из коробки работал так как мне надо не смотря на утечку памяти.Как приделать material тему к PreferenceCompat - пока абсолютно не понятно.
>>855876Найс, лучше накидай свой UI, и забудь об этих префернсах.
>>855883Опять велосипеды....
>>855885Если хочешь матириал - делай сам.
Где можно таких красивых андроидов как на пике купить? Няшненько.
Как перестать использовать MVVMhttps://habrahabr.ru/company/mobileup/blog/312548/
Возможно ли через firebase сделать следующее и в какую сторону копать?1) Загрузка файлов на сервер после авторизации через гуглоакк2) Удаление только своих собственных файлов с сервера
>>856206Возможно, читай мануалы.
>>846993>Не люблю F5 кучу раз в цикле жать1) Ещё один breakpoint после цикла + F92) Breakpoint with condition
Я говнокода принес. Что скажете?https://bitbucket.org/kotarep/magnittest/overview
>>856438Мы вам перезвони.
>>856452В чем проблема?
>>856457Вот нахрен ты все 3 конструктора перегружаешь у кастомной View?другой анон
>>856533Хороший вопрос, поправил.
>>856536А где ты поправил? И главно как и почему ты вообще решил поменять, а не объяснил зачем ты так сделал?И главное - какого хрена не GITHUB.com?
>>856539Ну я как то давно увидел в мануале, что переопределяются 3 конструктора. А эта вьюха тоже из мануала http://ru.stackoverflow.com/questions/422816/%d0%9a%d0%b0%d0%ba-%d0%b7%d0%b0%d0%bb%d0%b8%d1%82%d1%8c-%d1%84%d0%be%d0%bd-button-%d1%87%d0%b0%d1%81%d1%82%d0%b8%d1%87%d0%bd%d0%be/423285#423285 Короче так вышло. Теперь я подумал что можно оставить конструктор который принимает только context и все будет нормально. Bitbucket потому что стыдно шарить весь свой код приватные репозитории бесплатно.Все так?
>>856539> GITHUB.com?SJW-параша. Нахуй нахуй нахуй нахуй.
>>856533Я 4 перегружаю через @TargetApi(21)
>>856549>>856539Вы меня запутали, надо перезагружать или нет?
>>856550перегружать*
>>856542>BitbucketДавно известный факт:github - для публичного опенсорся (и друзьяшек/лайков репозиториев)bitbuck - для халавных приватных репозиториев>что переопределяются 3 конструктора. Я вот уже много лет в кастомных вью переопределяю только конструктор с 2 параметрами (он вызывается при построение UI из xml)Зачем нужен констр. с 1 параметом еще понятно, но где используется с 3-мя (ведь тема передается через ContextWrapper)?
>>856558А gitlab?
>>856578Это CI от github?Вот когда научится собирать (на их сервере) под iOS, тогда и приходите.
>>856582Это не CI.>>856578А хрен знает, у них на сайте есть "почему мы лучше GitHub", по-моему, там вода. Но ты можешь почитать.На мой взгляд, не нужен.мимо
>>856596>Это не CI.Он там есть, как часть его.Да и вообще мог бы подробнее рассказать если разбираешься.
Котаны, я правильно понимаю, что для таких задач Firebase НЕ подходит?1) Выборка данных через WHERE2) Выборка по координатам (например люди в радиусе 20 км)3) Выборка только пары полей объекта?
>>856637Рассказал тебе за щеку. Проверяй.
>>856661Не подходит.
Пытаюсь вкатиться в MVP. Есть вопрос: как сделать так, чтобы презентер и его фоновые процессы (запросы RxJava) переживали пересоздание активити? Какой способ посоветуете?
>>856698Нинужна.
>>856700Разверни свою мысль.
>>856698Ну тут два стула:1) Заинжектить презентер, делать каждые презентер синглтоном и не убивать, или хранить убивать только когда в нем нет фоновых задач;2) Не сохранять презентер, но все фоновые задачи держать в синглтоне;
>>856703> Заинжектить презентер, делать каждые презентер синглтоном и не убиватьТогда придется делать методы жизненного цикла в презентере, так? Типа onCreate(), onDestroy(). Или attachView(View view), dettachView(View view). Наверное, это всё усложнит тестирование.> Не сохранять презентер, но все фоновые задачи держать в синглтонеА как управлять состоянием тогда? Запрос на сервер, допустим, завершился, а презентера в это время не существует. Мы потерям состояние?
>>856698Объясняю, сука дауненок. Делаешь нахуй интерактор@Singletonclass YobaInteractor { Observable<Govno> run() { return mApi.kokoko().cache() }}В презентере инжектишь интерактор и вызываешь его когда хочешь. Все.
>>856703>1) Заинжектить презентер, делать каждые презентер синглтоном и не убивать, или хранить убивать только когда в нем нет фоновых задач;Говно, если у тебя в стеке вылезет ещё одна такая же активити
>>856710РЕПОЗИТОРИЙ@100 методов вызова апи, каждый возвращает Observable<Yoba>
>>856710Хуйня.
>>856720А что не так?
>>856719Ну я так никогда не делал)))0)>>856708Состояние ты определишь по закешированному респонсу или его отсутствию.А из методов жизни там будет байнд и анбайнд к View, притом не та что ведроидовская, а та что логическая, ВСЕ.
>>856710А если я уже послал запрос на эту хуйню, и данные еще не протухли, поворот экрана напрмиер?
>>856733Тогда как-то так получается? http://pastebin.com/wZfVNBEtА что делать, если view в этот момент null? Везде добавлять проверки if (view != null) ? Или что не так с моим кодом?
>>856708Самое лучшее - не баловаться творением хипстерков, а использовать то, что сказали дяди в гугле - пустой фрагмент с SetRetainInstance(). Один ретейн фрагмент - на одну вьюху.1) Кэшируешь обсёрвабл перед подпиской2) Когда презентер у тебя будет сохранять состояние в onSaveInstanceState - отписывайся от обсёрваблов, и хуярь ссылки на на них в отдельный метод вьюхи, который будет сохранять во фрагмент3) После ретейна вытаскивай эти ссылки, и подписывайся на них.Чтобы идентифицировать, к каким Observable какой Subscriber подписывать - используй мап с айдишником.Синглтон не советую - если у тебя юзер просто убьёт активити, синглтон будет висеть с закэшированными Observable.
>>856739>Или что не так с моим кодом?Я не в настроении делать код ревью. Сорян.Проверки нужно добавлять только там где ты пытаешься что-то во вьюху пихнуть, но вметсо прямой записи, сохраняй данные в презентере и если вьюха не нулевая то пихай в нее, а когда вьюха подцепливается пихай в нее последние данные, если есть.
>>856740> не баловаться творением хипстерковЭто ты про что?> пункты 1, 2, 3> Чтобы идентифицировать, к каким Observable какой Subscriber подписывать - используй мап с айдишником.Как-то слишком громоздко получчается. Тестировать, наверное, будет сложно..> если у тебя юзер просто убьёт активити, синглтон будет висеть с закэшированными Observable.Да, я тоже об этом подумал...
>>856671Но ведь ты не я.>>856637Пускай CI есть как часть. Самое главное, что это не от GitHub, это его конкурент.Нет, не разбираюсь. Читал про гитлаб какое-то время, пока про него на hacker news писали в начале года, но так и не понял, чем он лучше гитхаба. А потом и забыл про гитлаб совсем.
>>856745> но так и не понял, чем он лучше гитхабаМожно на свой сервер поставить. А так, ничем не лучше.
ПЕРЕКАТ https://2ch.hk/pr/res/856749.htmlПЕРЕКАТ https://2ch.hk/pr/res/856749.htmlПЕРЕКАТ https://2ch.hk/pr/res/856749.htmlПЕРЕКАТ https://2ch.hk/pr/res/856749.htmlПЕРЕКАТ https://2ch.hk/pr/res/856749.html
>>856739>>856742Ага, в Mosby примерно такой подход и используется. >Mosby provides MvpBasePresenter, a Presenter implementation which uses WeakReference to hold the reference to the view (which is a Fragment or Activity) to avoid memory leaks. Therefore when your Presenter wants to invoke a method of the view you always have to check if the view is attached to the Presenter by checking isViewAttached() and using getView() to get the reference.Alternatively, you could use MvpNullObjectBasePresenter class that implements Null Object Pattern for the MvpView. So whenever MvpNullObjectBasePresenter.onDetach() gets called the View will not be set to null (as MvpBasePresenter does. Instead an empty View gets created dynamically by using reflections and gets attached as view to the Presenter. This avoids view != null checks since either the real view is attached or the null object pattern view is attached that simply does nothing on method invocation.
>>856743>Это ты про что?Это я про всякие велосипеды с презентерами-синглтонами.>Как-то слишком громоздко получчается. Тестировать, наверное, будет сложно..У тебя у презентера по сути добавляются 2 метода:saveObservablesInYourMom()restoreObservablesFromYourMom(Map<Integer, Observable>>)Первый передаёт обсёрваблы в подобный метод у View. Второй вызывается вьюхой при инициализации.>Да, я тоже об этом подумал...Вся прелесть ретейн фрагмента в том, что он живёт только если произошёл поворот.
>>856740>если у тебя юзер просто убьёт активитиШто? Как юзер может убить активити?он может только убить приложение целиком
>>856759Совсем даун?Жму кнопку назад, открывается предыдущая активити, старая убита, но приложение работает
>>856766Ты че такой не агресивный-неадекват.Это называется не "пользователь убил", а активити разрушилось.
>>856767Ога, само взяло и разрушилось. Плак-плак.
Как запилить ебаные локальные юнит тесты?Сделал все по гайду, от гугла:1. положил класс с тестами в src/test/java2. прописал зависимости testCompile.Нихуя не работает, причем никакие зависимости со скоупом testCompile не подтягиваются вообще. Либо мб есть способ использовать файл из файловой системы в androidTest?
Пытаюсь для себя разобраться с андройдом и попробовать запилить свой TCP клиент. С джавой знаком слабо, но есть опыт на других языках. Так вот, испытываю проблемы при обмене инфой между потоками. Хотелось бы организовать в потоках события, например произошло соединение, пришли данные и т.п. Если сравнить с Qt то хочется сигналов-слотов, если с Delphi - procedure of object. В Java вместо этого есть паттерн "наблюдатель", но он сцуко не работает из потоков в андройде (возникают эксепшены), либо я не нашел как его грамотно использовать. Практически все примеры с потоками, которые я видел для андройда - без обратной связи (запустил и оно работает пока поток сам не завершиться). Какой все-таки православный метод организации событий?
>>857926Попробуй какую-нить RxJava