Котаны, а есть вообще гайды про то, как нормально прикручивать Support-библиотеки от начала и до конца, чтоб и материал и обоссаться современно?
Ожидал нормальной обратной совместимости по графону, но блядь стоит как-то начать кастомизировать дефолтное отображение - всё идёт пиздой и легче реализовать самому (или нет?).
Лайауты ругаются линтом на то что фичи всё равно только с 21й версии, кроме cardLayout, recycleView и fab практически нихуя нет.
В общем есть в ретрофите функция, пикрелейтед, которая по возвращённому HttpStatus определяет куда этот ответ потом отдать дальше - в onSuccess или в onError. Проблема в том, что мой сервер в случае ошибки вместе со статусом отправляет ещё свой код ошибки, а ретрофит не конвертит тело в случае ошибки (if (code < 200 || code >= 300)). Собственно вопрос - что делать в таком случае? Есть ли какой-то готовый вариант решения проблемы или тут надо делать форк и самому править ретрофит?
>>1033334 Эм не, не так. Вот, например, у меня при регистрации, если логин введён неправильно (без @ или точки), возвращается HttpStatus.UNPROCESSABLE_ENTITY. Тоже самое возвращается, если неправильно введён пароль и ещё один параметр. На клиенте мне надо вывести сообщение об ошибке, но как понять что именно пошло не так, если на три действия возвращается UNPROCESSABLE_ENTITY. По-этому я в дополнение отправляю свой код ошибки, который нужен для вывода сообщения. Можно было бы в onError парсить errorBody, но в таком случае по пиздец идут тесты, так как придётся мокать таким образом, чтобы оно кидало HttpException, а чтобы его заполнить в тесте нужен ретрофит.
>>1033338 >Можно было бы в onError парсить errorBody ага
>но в таком случае по пиздец идут тесты, так как придётся мокать таким образом, чтобы оно кидало HttpException, а чтобы его заполнить в тесте нужен ретрофит
>>1033353 >Ну, а почему вместо текста нельзя тогда просто свой код ошибки вернуть?
потому что ТАК ПРИНЯТО и написано в стандартах https://tools.ietf.org/html/rfc2616#section-6.1.1 , что 2xx - не ошибка, а информационный статус что всё ок в разных вариациях. Хочешь кидать ошибки - кидай другие статусы.
>>1033362 Мне кажется мы про разные вещи говорим. Я не кидаю свои коды ошибок вместе с 2хх статусом, я их кидаю вместе с другими статусами (422 в данном случае).
тем не менее у тебя статус лишний в json-ответе. правильнее было бы выкинуть его нахуй в случае успеха. а в случае ошибки получать ОСОБЕННЫЙ json из ошибки - типа как { "error": "error text" }.
>>1033395 >но что-то как-то хуёво выглядит потому что ты константы завёл зачем-то, вместо того чтобы в теле теста это писать - с первого взгляда не видно что твои тесты делают, если не вчитываться.
и в данном случае похуй если у тебя значения будут дублироваться в разных тестах. для твоего случае каждый тесткейс должен быть изолирован от другого.
>>1033406 >потому что ты константы завёл зачем-то, вместо того чтобы в теле теста это писать - с первого взгляда не видно что твои тесты делают, если не вчитываться. Ну это наверно было очевидно, но я совсем недавно начал заморачиваться тестами.
>и в данном случае похуй если у тебя значения будут дублироваться в разных тестах. для твоего случае каждый тесткейс должен быть изолирован от другого. То есть, вот так?
>>1033395 уже лучше, но тебе ещё нужно определиться что ты тестируешь, и сделать соответствующий класс и методы.
Типа класс для тестов логина - TestLogin, в котором каждый метод проверяет какой-то отдельный случай. (например методы okayLogin, wrongLogin. wrongPassword итп)
loginRequest_shouldReturnGoodResponse - оч хуёвое название. Оно вместо того что ты тестируешь говорит то что ты должен получить в ответ (а это ты и так проверяешь внутри теста).
>>1033422 >loginRequest_shouldReturnGoodResponse - оч хуёвое название. Оно вместо того что ты тестируешь говорит то что ты должен получить в ответ (а это ты и так проверяешь внутри теста). Да, придумывать названия это самая сложная часть программирования.
У меня вот регулярно (пару раз в неделю) выдаёт ошибку что не найден AndroidSDK (не отображается logcat). При этом командами грейдла всё собирается и устанавливается ок. А вот запустить на телефоне из студии кнопкой play не выходит. Потом хуй знает от чего (чищу все кеши, чищу бинарники) оно включается. А иногда всё то же самое делаю и нихуя.
Кто-нибудь мб знает хотя бы, отчего это происходит? В гугле ниче не нашел.
>>1030496 Линтер в твоем случае прсото предупреждает что тенюшки/финтифлюшки не будет. Обычно саппортноу библиотеки хватает, но есть случаи когда сторонние лучше, просто пробуешь сапортной, а если не вшыло идешь на Android Arsenal.
>>1033384 Мне кажется ты вместо например gsonовской фабрики адаптеров вставить свою, и в момент получения выворачивать данные в какую-нибудь структуру вида: Either<Data, Error>, где Data это нормальный тип, а в error ты сваливаешь все данные по HttpException/IOException/JSON своих статусов.
>>1033334 >твой косяк что твой сервер ошибки но кодом 2xx возвращает (это вообще вотзефак). Это норм, если кастомное решение. С таким способом можно вообще довольно годно свои ошибки обрабатывать, написав всего лишь свою обертку над колбеками.
Аноны, как обычно кодят такие ситуации, когда можно переключать отображение списком и гридом. В спиксе у меня номер айтема, описание и еще пару текстовых хуиток, а в гриде только цветной квадрат с номером. Писать два разных адаптера и переключать их при переключении отображения или есть какой-то более идеоматик путь?
>>1033664 Используешь RecyclerView, которому можно менять LayoutManager. Вместе с лэйаут менеджером можешь либо адаптер менять (адаптеры с разными вьюхами), либо внутри адаптера предусмотреть логику, что бы по изменению стиля использвоались другие вьюхи, а холдеры анрмиер оставить те же.
Анон, я воюю с одним и тем же багом уже недели три, облазил весь StackOverflow в поисках ответа, но ничего не помогает, может хоть ты подскажешь. Делаю свой простенький браузер чтобы впечатлить hr-ов и заказчиков. Вкладка у меня реализована как фрагмент Tab, где есть TabControlFragment (кнопки назад-вперед, адресная строка) и WebView. Когда я в первый раз вбиваю в строку адрес, он все нормально грузит, но когда я пытаюсь еще раз ввести адрес из строки, то ничего не происходит - текущая страница тупо обновляется, а в логах влезает такое сообщение W/BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid. Но самое смешное, что этот баг есть только когда я тестю на устройствах, в Genymotion все работает нормально! Это самый пиздец и самое обидное. Анон, я правда в отчаянии, помоги.
>>1034084 public App getInstance() { if (instance == null) instance = new App();
return instance; }
за такое вообще надо руки отрывать. 1. Application создаётся и пересоздаётся системой, а не тобой. new App - это пиздец на уровне new Activity или new Fragment с параметрами.
2. Application можно всегда получить через getApplication.
в твоём случае при каждом пересоздании Application будет новый, соответственно и "синглтон" instance будет новый (причем не являющийся настоящим application).
ещё в конструкторе ты присваиваешь context = getApplicationContext. если задуматься, что происходит - ты инициализируешь поле класса ссылкой на самого себя (т.к. getApplicationContext и вернёт инстанс твоего Application - лол!). А это эквивалентно context = this, что нахуй не всралось, как и твой метод getContext.
При том что у тебя есть типа синглтон аппликейшна (который на деле не будет синглтоном) использовать статик для табменеджера - это вообще эпик. нафига вообще синглтон-то тогда делал для App?
C volatile вообще проиграл. Поясни, зачем? зачем ты это сделал? Правда интересно узнать.
Теперь смотри как надо.
Application - синглтон по своей сути. Он всегда живой если у тебя есть хоть чтото в приложении, т.к. он создаётся перед всем остальным (системой, а не тобой, забудь нахуй про new). Получить его в своём случае ты всегда можешь через (App)getApplication(). Он же является контекстом приложения (разберись мб что такое контекст? андроид с этого начинается.).
От всего твоего App останется:
public class App extends Application { private TabsManager tabsManager;
@Override public void onCreate() { super.onCreate(); tabsManager = new TabsManager(); }
public TabsManager getTabsManager() { return tabsManager; } }
Прошёлся по твоим остальным классам - там сходная хуйня (например CherryClient). Вообще это bad practice делать статик-синглтоны в андроиде,т.к. всегда есть Application, и оно для этого. Там же и состояние всего можно загружать из дб или преференсов.
>>1034191 Нет, как раз в апликейшене, я думаю, ему самое место. Раз Application это синглтон сам по себе, то TabsManager, в котором будет храниться состояние вкладок, лучше держать там. Ну а если я не прав, то тогда где?
>>1034203 я считаю что апликейшн нужен сугубо чтобы инциализировать всякого рода хуйню вроде крашлитиксов, лицокниг и прочих либ которые нуждаются в контексте. А учитывая что этот табманагер не нуждается в контексте, то его можно вынести куда нибудь в компоненту даггера и тупо инжектить синглтоном куда надо.
>>1034200 >>1034207 Окей, я понял про даггер, спасибо хотел отложить его на попозже, но видимо без него никак Я пофиксил ненужные синглтоны, но баг все-равно остался. Все так же не хочет менять страницу если вбивать в строку, но по гиперссылкам переходит.
>>1034211 я твоё этсамое запустил. в 100% случаев ловлю багу в onResume:
07-30 00:13:56.542 24759-24759/ru.alexeypopov.cherry E/AndroidRuntime: FATAL EXCEPTION: main Process: ru.alexeypopov.cherry, PID: 24759 java.lang.RuntimeException: Unable to resume activity {ru.alexeypopov.cherry/ru.alexeypopov.cherry.presentation.activity.MainActivity}: java.lang.IllegalStateException: Fragment already added: TabControlFragment{77b46fd #1 id=0x7f0b0076} at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3844) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3885) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386) Caused by: java.lang.IllegalStateException: Fragment already added: TabControlFragment{77b46fd #1 id=0x7f0b0076} at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1679) at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:726) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2355) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146) at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008) at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:499) at android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:172) at android.app.Activity.performResume(Activity.java:7125) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3821) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3885) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
Разберись сначала с тем как фрагменты добавляешь и их жизненным циклом, и вообще жизненным циклом всего в андроидах.
Про даггер - можно и без него, у тебя ща не те масштабы чтобы об этом париться (да и рано тебе явно пока).
Лучше бы про интерфейс запарился - больше бы впечатлило когоугодно, твой код всё равно никто разбирать скорее всего не будет.
>>1034221 Приложение без изменений из репозитория - блокирую экран, перезапускаю.
при этом отрабатывают onResume у MainActivity. И как ты мог догадаться (если бы понимал про жизненные циклы компонентов) - создание и onResume текущего фрагмента.
который Tab.onResume: activity.getSupportFragmentManager().beginTransaction() .add(R.id.tab_control_container, controlFragment) .commit();
который уже добавлен. короче еще один метод у тебя, где хуйня написана. непонятно вообще, что оно у тебя в onResume делает.
>>1034222 Так, эту херню я понял. Её нужно было закинуть в onActivityCreated (я не дурак, знаю lifecycle и то, что onResume запускается при каждом возобновлении, просто я зачем-то это сделал, когда уже начал в бубен бить) Сделал комит, теперь попробуй
теперь поясни ещё раз про свою багу: >в первый раз вбиваю в строку адрес, он все нормально грузит, но когда я пытаюсь еще раз ввести адрес из строки, то ничего не происходит - текущая страница тупо обновляется, а в логах влезает такое сообщение
точнее, 1. что делаешь. 2. что ожидаешь что произойдёт. 3. что по факту произойдёт
>>1034225 Сначала я в первый раз ввожу адрес страницы в строку и все нормально загружает. Затем 1) Далее я меняю адрес страницы в строке 2) Ожидаю что загрузится новая страница 3) Загружается та же самая
>>1034227 ну хз, прошёлся отладчиком по твоей схеме на железке - у меня на сосунге гелакси ок всё и с отладчиком и без.
рекомендую и тебе под отладчиком прогнать с точки listener.onAdressChanged(address) и посмотреть чего у тебя там меняется.
вдогонку по коду не понял вообще: 1. зачем тебе CherryClient.shouldOverride.... - ты там нихуя полезного не делаешь кроме дефолтного поведения - может быть потенциальным источником твоей баги. Метод подразумевается что ты как-то иначе будешь со ссылкой работать чем по-дефолту, и возможно по-дефолту там больше делается в итоге чем у тебя. Жопой чую что твоя беда отсюда.
2. зачем не в xml-лайаутах TabControlFragment.onCreateView: backButton.setText(R.string.button_back); refreshButton.setText(R.string.button_refresh); forwardButton.setText(R.string.button_forward); adressEditText.setLines(1);
>>1034236 Ладно, анон, спасибо что не проигнорил! Я хз на самом деле, просто и на Galaxy Tab A смотрел и на Xiaomi Redmi 3S смотрел, одна и та же хуйня была, но ты обнадежил что у тебя все работало. А у тебя какая версия ведра стоит?
>>1034236 1) Без shouldOverride он при загрузке страницы открывал WebView на полный экран. 2) Я хотел как-то прописать рессурсы с помощью Butterknife, потом понял что так не получится и чот забил.
>>1034238 >Без shouldOverride он при загрузке страницы открывал WebView на полный экран.
больше похоже на багу компонента. ожидаемое поведение же не такое должно быть. у меня кстати ок и без оверрайда shouldOverride
у тебя в итоге от shouldOverride чето неявное происходит, что ты не контролируешь, и в итоге имеешь вероятность новую багу породить закостылив старую. ну а так хзче у тебя на самом деле творится.
судя по тому какие вопросы ты задавал в марте и тому что задаёшь сейчас у тебя сильного прогресса с тех пор не случилось. и по уровню кода тоже. а почти 5 месяцев - это дохуя, можно было и норм в основах разобраться - делаю вывод что жопа у тебя не горит по теме - значит тухло браться.
>1. Java, самую малость Android. >2. Закрепить Java, дотянуть Android до джунского минимума, попрактиковаться в гите.
На джунский минимум тебе базу андроида понимать надо на автомате - контексты, жизнециклы, интенты, сервисы. Заебок еще если разобраться тем что на уровне ОС этому соответствует. Ну и жаву чем лучше - тем лучше. Фреймворки дрочить без понимания этого - путь в никуда.
Олсо в андроиде, уже писал раньше - джуны не нужны, рыночек перегрет вкатывальщиками - либо целишься на мидла с соответствующим уровнем.
Анончик, можно нубский вопрос? В фреймворке есть метод "Class<Base> foo()", мне нужно переопределить этот метод в своем классе так, чтобы возвращать Class<Derived>. Это можно как-то сделать не изменяя код фреймворка?
>>1034256 А если серьезно? Да, я за пять месяцев не особо продвинулся, но мне деваться некуда уже. Через год я выпускаюсь, а работы до сих пор нет. Если не найду работу до следующей осени, родители обещали выгнать из дома. Так что если мне теперь и идти, то только вперед.
>>1034255. я не представляю как можно не вкатившись куда-либо подняться за год до уровня мидла.
>Да, я за пять месяцев не особо продвинулся, но мне деваться некуда уже не продвинулся - значит тебе это не надо было.
>Через год я выпускаюсь, а работы до сих пор нет фрилансуй, бегай по собеседованиям, делай тестовые задания, книжки читай, бухай поменьше, курс по андроиду на курсере пройди все части, что еще сказать.
>>1034394 Скорей всего из-за спизженой реализации синглтона, в которой подразумевался доступ из разных тредов. А то что такого по факту здесь нет, и вся работа онли из UI-треда - дак похуй же.
>>1034261 >фрилансуй, бегай по собеседованиям, делай тестовые задания Ви таки говорите будто бы начать фрилансовать на андроед проще чем устроиться джуном.
Двач, использую обычный viewpager т.е. он создает вьюхи, а не фрагменты. Как заставить его пересоздать все вьюхи? Т.е. чтобы для каждой вызвался instantiateItem.
>>1034866 Разобрался. Если кому интересно - решается переустановкой адаптера. pager.setAdapter(null); pager.setAdapter(adapter); Ну и сохранить позицию выбранной вкладки, а потом установить ее опять т.к. обнуляется.
При удалении элементов из ресайклервью с notifyItemRemoved(position) не меняется размер ресайклервью. С notifyDataSetChanged() меняется, но пропадают анимации. Как мне заставить ресайклервью уменьшаться при удалении элементов через notifyItemRemoved?
>>1036152 Конкретно не устраивает, что "message/rfc822" выдает всякие скайпы и блютузы, а Intent.ACTION_SENDTO без этого эффекта не позволяет прикрепления.
>>1034071 Вопрос к местным помидорам. Адекватно ли джунам на собеседовании давать код как на том пикрилейтеде, чтобы ошибки указывали, или таки перебор? Спросил напримере у пары знакомых андроид-макакеров - максимум половину проблем выявили.
>>1036915 По-моему плохая идея. Это как раз тот случай, когда переписать с нуля самому проще, чем сидеть и пытаться догадаться, что же вообще хотел написать автор.
>>1037410 Первый раз вижу такой синтаксис. WHERE column1=1 AND column2=2 При этом эти значения нельзя подставлять тупо через конкатенацию, должна быть либа для prepare stateent
>>1037460 Про AND я уже понял, хотя и странно, что первый вариант с jdbc работает.
А насчет конкатенации - это проблема, когда подставляются элементы, которые вводит пользователь. А еще зависит от типа приложения. Кому вот нужно проводить SQL-инъекцию в приложении с календарем бабских мурмусиков?
>>1037473 А еще в prepare statement нельзя подставлять имена таблиц или столбцов, например. Так что проблемы инкапсуляции от отличии от простой конкатенации оно не особо решает. + в теории может быть более медленным, если используется всего один раз. А запросов может быть много подряд разных.
>>1037344ущий > Стоим велосипеды на костылях, пока грейдл недовольно урчит, делимся фреймворками. Очкастой бабы на превью больше не будет. > SON YOU ARE A DEVELOPER NOW Хорошая шапка. А вкатиться-то как?
>>1037733 Книг нормальных на русском почти нет - отдельные главы из разных ок, остальное хуйня и старье. Платные курсы по андроиду лично - говно де-факто. Придётся много шуршать по стековерфлоу, читать гуглогайды и рандомные статьи, пока не привыкнешь и не начнешь думать что так неплохо. Привыкание возможно случится при регулярном обмазывании где-то через полгода - тогда мб чето начнешь понимать чтобы собеседоваться на джуниора.
Можешь еще курсик с курсеры глянуть - на ютубе все видео есть.
Если не пропрёт - это не твоё и не вкатывайся, плес.
Котаны, очень хочется высказаться, меня в усмерть заебал грейдл. Выть охота, когда конфигурирую эти ссаные скобочки. Ни гайдов ни примеров нормальных, нихуя. На одной версии одно говно, на другой другое, у тебя третье, плагин обновлять, версию писать и ебаная динамическая типизация блядь нахуй нахуй блядь АААААААААААААААААААААААААААААААААА.
Неужели это лучшее что смогло придумать человечество за 10 лет разработки костылей для андроида?
И вопрос к знатокам - что прописать чтобы запустить таску, чтобы она выполнилась автоматически ПОСЛЕ ВСЕХ выполненных (независимо от того что выполнится) - будь то компайл, билд или клеар или любая другая для данного проекта, например?
>>1037786 > чтобы собеседоваться на джуниора Мне нахуй не нужно собеседоваться на джуниора. Я вполне себе сеньор-серверсайд. Так что интерес скорее "для себя", и мне интересно узнать, какие доки / мануалы / ресурсы смогут объяснить всю эту андроид-джава-инфраструктуру. Желательно без "смотрите, ребята, это называется класс..."
Потом берёшь книжку HeadFirst по андроиду, пропускаешь главы про классы и смотришь только на структуру приложения. Если не дебил - за день пролистаешь и сделаешь первое приложение, потом гуглируешь то что не понимаешь и углубляешь.
А так более основательный обзор с точки зрения ОС: -Танненбаум - операционные системы поновее издания - глава про андроид. -Про концепты безопасность в андроидах - книжка - https://www.nostarch.com/androidsecurity
>>1037818 О. Годнота пошла. Мне бы еще про работку с графикой, желательно без всяких тяжеловесных юнити. Но это я уже так, вредничаю. про то как устроен Андроид - интересно, но малополезно. Мне не интересно каким образом там вызовы из Джавы маппятся в сисколлы, сириусли.
>>1037840 Нет, тридэ как раз не нужно. Обычная плоская графика с няшными эффектами. Но да, спасибо за первую ссылку. Буду вкуривать. Может, если все пойдет норм, выдам через определенное время простенькую логическую игрулину.
Смотрю темы ведра в исходниках и вот никак не могу понять, где искать описание для всех атрибутов в темах? Вот видишь наример в теме: colorBackgroundFloating, actionModeCutDrawable, или еще какую хуйню. И что делать? Вот тут https://developer.android.com/reference/android/R.styleable.html не все можно анйти например, аттрибута controlBackground там например нет.
Где-то в официальной документации видел, что создание постоянно висящего и неудаляемого уведомления в шторке - предотвращает убийство свернутого activity. А сейчас не могу найти ссылку. Помогите, плиз, котаны.
>>1038735 >foreground service Ну да, видимо, оно. Но вот беда, у меня есть кусок кроссплатформенного кода (таймер, который должен работать всегда). Кроме службы переднего плана нет иных способов гарантировать, что сворачивание приложения его не прихлопнет?
>>1038757 Слишком пердольно и вообще не то. Это игра, и через какое-то время должно что-то произойти, причем отсчет ведется визуально. Не хочу пидорасить реализацию, она не должна зависить от платформы. Максимум - запускать пару платформоспецифичных методов. То есть, сам поток с таймером менять низя.
Вот тут я читаю, что приоритет - не распространяется на отдельные компоненты, но на весь процесс в целом. Это правда? Если да, то означает ли это, что foreground service повышает приоритет и свернутого activity? Если так - можно в момент старта таймера запускать этот процесс, который просто делает холостую работу. И по окончанию таймера вырубать.
>Процесс, необходимый для текущей деятельности пользователя. Процесс считается процессом переднего плана, если выполняется любое из следующих условий: ... - Он содержит службу Service, которая выполняется "на переднем плане", — службу, которая называется startForeground(). ...
То есть, в теории, даже свернутые activity с такой службой - должны выживать.
Аноны, как абстрагируете работу с вьюхами и тулбаром? Во фрагментах куча всякого говна по инициализации, настройке, подготовке всех вьюх, айтемов для тулбара, обработка нажатий, ясное дело что все это выглядит как говно.
> java.net.SocketException: socket failed: EMFILE (Too many open files) Что это такое? На чистом ведре UDP работало, на MIUI не хочет. У меня вермишели из RxJava, что там могло пойти не так? Отладчиком прошелся - всё нормально, а пакеты не улетают.
>>1039053 настройку каждой отдельной хуйни выносишь в отдельный метод и потом просто вызываешь все нужные методы в onCreateView например или ещё где-нибудь, тогда код выглядит довольно таки читабельно, никакой реализации в основных методах фрагментов нет и они получаются короткими и няшными
Помогите разобраться с простейшим делом. Есть сервер, на котором имеются видео. Нужно с помощью qraphql брать ссылки на эти видео и подставлять в строковую переменную для дальнейшей обработки. Сервер настроен под данную технологию запросов, т.к. существует вэб-версия, которая работает по этому принципу. Поскольку я новичок, у меня нет четкого представления для реализации данной задумки. Пока я имею один класс с видеоплеером, чтобы показывалось видео, на данный момент существует строковая переменная, где ручками прописывается ссылка на видео. Дальше я не знаю, создавать отдельный класс для осуществления запросов и получать оттуда ссылку, но как? В гайде от разработчиков я не могу разобраться самостоятельно, может кто подскажет?
Вот такие данные возвращаются с сервера. Но мне сперва нужно запихнуть ссылку(url) в плеер. Остальное будет реализовываться в дальнейшем, как опыта немного поднаберусь в этом деле.
Нормально ли использовать application object для хранения данных для фрагмента? У меня когда активити создает или реплайсит фрагменты, оно устанавливает на фрагменте некоторые проперти(типа mainActivity.startHueta(Hueta hueta){ HuetaFrag huetaFrag = new HuetaFrag(); huetaFrag.hueta = hueta; fragmenTransaction = .....), но при повороте экрана все идет по пизде и я получаю npe. Не хочу использовать вариант с записью модели в бандл т.к. некоторые модели содержат листы с другими моделями, с парой уровней вложенности и я заебусь реализовывать для них parceable. Или хранить данные в appication совсем зашквар?
Еще нихуя не понимаю что происходит с фрагментами на бекстеке. Я так понимаю они просто все висят в памяти т.к. все мои фрагменты при возвращении назад нормально отрабатывают, а значит проперти с моделью висело в памяти, но что произойдет при повороте экрана со всеми фрагментами на стеке?
>>1039636 Да, и про твой вопрос с бэкстэком. Когда ты поворачиваешь экран, твоя activity уничтожается и пересоздается, а значит и фрагменты вместе с ними
>>1039636 Google на недавнем IO17 выкатили свои рекомендации по архитектуре приложений, в т.к. и хранения данных, лайвциклы. Самое время начать раскуривать их, Антон.
>>1039636 Попробуй RetainFragment, то есть делаешь отедльынй фрагмент котоырй ретейнится, которому похуй на на повороты, данные пихаешь в него, а потом достаешь. Но вообще почему бы не записать в базу?
>>1039710 А давай ты навернешь. Ему нужно хранить не какие-то глобальные настройки прилодения, а текущее состояние одного единственного фрагмента. А то что он делает - сказочный костыль прямиком из Индии
Сосаны, я вот подумул, а на сколько нужно заходить в оптимизации. Вот допустим есть у меня список товаров, ну штук 100. Юзер кликнул кнопочку у товара и количество увеличилось на 1. Надо бы это в базу записать да и карточку товара уобновить. Записываем в базу, потом в другом месте нам прийдет новый спсиок товаров сввапнем адаптер с сохранением вьюшек, или испольузем диффутил, не суть важно. И тут я подумал, а ведь это целые новые 100 объектов, выборка из базы и тд.
Может не стоит так делать (для больших коллекций, например списка меседжей наверное точно не стоит), и нужно просто локлаьный списочек поменять и отнотифаить адаптер? Или это экономия на спичках уровня созданяи вьюх в коде, которая спасет хуй процент батареи, хуй килобайт памяти?
>>1039890 Та я даун просто, который апи нормально не выкупил. Покопался и нашел что можно не весь список мониторить с определенной выборкой, а изменения по таблицам с кастомными тегами (речь про StorIO). Это сняло весь вопрос, по крайнемере для меня.
Вообще вопрос если его переформулировать и смержить с новыми данными может выглядеть следующим образом: Как (точнее когда) "лучше" изменять данные в адаптере: 1) Как только пользователь что-то поменял, сохраняем изменения в адаптере и пстфактум пишем в базу; 2) Как только пользователь что-то поменял, пишем в базу, получив результат записи отображаем изменения; 3) Как только пользователь что-то поменял, пишем в базу, в другом месте где обсервим базу получаем информацию об изменениях, достаем из базы как надо и отображаем изменения;
>>1039921 часто писать в базу это дорого по идее, мб лучше записывать в базу уже после того как пользователь всё сделал? а до этого просто писать в адаптер
>>1039946 >мб лучше записывать в базу уже после того как пользователь всё сделал А если нет "конца", вот он закрыл приложуху и что, весь твой адлаптер пропал, нет кнопки сохранить. Почему ты решил что дорого?
Тем более вот другая ситуация, список сообщений в чате, приходят они в сервисе по сокету, соответственно писать ты можешь только в базу, а оттуда уже пихать в адаптер и аллаха.
Есть какой то встроенный механизм, которым я могу ограничить количество отображаемых символов в текстовых полях чтобы при превышении лимита оставшиеся символы заменялись троеточием. К примеру задаю ограничение на 10 символов и какая-нибудь длинная надпись будет отображаться как "Длинная на..."
Привет двощ! Начинаю вкатываться программинг на андроиде, прочитал приличное кол-во мукулатуры, остались вопросы. Можно ли где-то найти годные курсы (на коммерческой основе), с обратной связью, чтобы я мог задать свои глупые нубские вопросики?
Сап, ебусь в глаза и второй день ебу как перенести это на рельсы RX. https://pastebin.com/wjbpRK5d start() - делает запрос в сеть и если все плохо запускает delayedLaunch() delaySec - сколько секунд выжидать между запросами
>>1040601 пиздец блять, что за велосипед, не проще это переделать нахуй? если у тебя запрос в сеть, то просто юзай ретрофит, он тебе всё нормально сделает, нахуй тебе эти задержки руками делать?
Здравствуйте, уважаемые, хочу у вас узнать, есть ли какой-то, грубо говоря, конструктор (по типу C++ builder), хочу запилить для одного сайта маленькую приложуху на телефон. Java знаю на уровне хеллоуворлда, C# знаю средне, так же С++, знаю на достаточном уровне Python.
Кто-нибудь уже юзает room? Что-то я совсем не понмаю как организовать отношения между сущностями т.е. если какая-то сущность содержит в себе массив других сущностей. Как это реализовать? Хранить в модели массив айдишников этих других энтитес, а в кастомном геттере загружать эти энтитес через dao и опционально кешировать?
>>1040776 Почему? Мне вожно лишь понять можно ли как то этот кусок: https://pastebin.com/Tcta8aA1 распихать по рх-операторам. Заменить хендлер на Обсервабл с задержкой и самовызовом внутри и мартышка может.
>>1041579 Не будет, твердо и четко. Здесь не браузер и не бекенд, это вам не скрипты писать. Твои строчки здесь порвут на милионные простыни, это мать ее джава.
Короче поябался с room, вроде годная вещь, в сравнении с пердолингом на голых SQLHelperax, но я нихуя не понимаю как смоделировать one to many и many to many.(со сложными, связанными данными не работал) В примерах @ForeignKey используется для ссылки на одну entity. А что делать если у меня условный класс User cодержит List<Comment> comments, а у другого есть поле Map<User, Role> roles. Как такое мапить?
Как более комфортно вкатиться в андройд? Около трех месяцев копаюсь в джаве по классам, исключениям, процедурным и вот начинаю многопоточность, а следом и коллекции пойдут. Стоит ли мне засиживаться на Swing и тому подобных библиотеках и еще более детально прорабатывать сам язык? Или уже стоит после моего мини-курса начинать углубление в андройд, попутно почитывая за чашкой чая Брюса Эскеля?
>>1041998 книги не нужны, самый эффективный способ это просто взять и начать писать код, иначе будешь ещё хуеву тучу лет сидеть за своими книжками, а толку нихуя
>>1041998 > Или уже стоит после моего мини-курса начинать углубление в андройд, попутно почитывая за чашкой чая Брюса Эскеля? This. По яве тебе главное надо знать классы, наследование, интерфейсы, внутренние класы, анонимные реализации. Статик поля\функции. Основные интерфейсы коллекций типа list, map, set и отличия реализаций. Немного io, без сильного углубления в детали. Обработку исключений, и самую базовую многопоточность. Если это более-менее знаешь - можешь закатываться. Кроме явы еще желательно знать что такое колбеки, паттерн observer и singleton, xml, json(без подробностей стандарта, а в общем что такое и как пользоваться.) Немного основ сетей(реквесты, респонзы, http(s), клиент-сервер)
swing тебе нахуй не нужен, даже не притрагивайся. А вообще не знаю какой там у тебя темп, но 3 месяца для классам, исключениям, процедурным(это вообще что?) и вот начинаю многопоточность, а следом и коллекции пойдут это чет дохуя. По нормальному основы java за месяц с нуля осваиваются, если занимаешься хотя бы по 1-3 часа в день.
>>1042034 Хз, я перекатывался(до этого знал малось джава кор(олимпиадник), алгоритмы да паттерны) прочитав Head First и Big Nerd Ranch. Правда на это ушло 3 недели во время рождественских а не 3 месяца. Потом пару месяцев кодил всякое и учил фундаментальные либы - рх, даггер и проч. Уже пол года работаю в продуктовой компании на одно маленькое и богатое государство)
>>1042051 ну так блин, одно дело быстренько пролистать какие-то книжки и потом начинать кодить, а другое дело 3 месяца сидеть читая какую-то хуйню и собираться ещё столько же продолжать читать
>>1041691 Так с бд я знаю как это происходит. Если one to many, то в тех entity, которых many создается поле с айдишником родителя. А если many to many - то создается промежуточная таблица с отношениями idEntity1-idEntity2. Но я в room нихуя не понимаю как запихнуть. Все статьи кастрированные с простейшими моделями. На commonsware судя по заголовкам все что мне надо разбирают, но для полной статьи надо их книга за кровавые доллары. https://commonsware.com/AndroidArch/previews/room-and-relations
Если у тебя есть какие-нибудь более подробные стати или знаешь опенсурс приложения, которые юзают room - поделись. с меня лучи магии дружбы.
Господа, поясните нубу как выищете инфу по необходимому вам вопросу? Вот мне, например, необходимо отправить смс из под моего приложения так, чтобы оно сохранилось в дефолтном смс-менеджере, но информации по этой части нихуя нету ну или я аутист - все попадающиеся статьи, как правило, связаны просто с отправкой смс с помощью метода по типу SmsManager и т.п. Помогите дауну, плз.
Привет аноны, у меня давно назрел вопрос о тестировании, и я так и не нашел ответа. У меня есть приложение, которое взаимодействуе с таким же приложением на другом устройстве, то есть Р2Р взаемодействие. Взаимодействий довольно много и я заебываюсь все это тестить вручную, есть ли возможность забацать какие-то тесты - сценарии (наверное два набора, один для сендера и второй для рессивера), на Эспрессо, чтобы они запускались на двух устройствах одновременно и комуницировали между собой, ну и падали если ассершены не сработают. Я понимаю что они будут "флэки", но возможно сделают мою жизнь немножко проще, да и сама идея тестирования Р2Р интересна.
>>1042540 Да там говнокода много, я потом вкину, когда будет получше. Но суть в том, что все делал вручную. Сначала отрефакторил модель чтобы не было many to many. А там где one to many создавал в модели "many" поле на id "родителя". one to one тоже самое. И написал функцию в классе базы, которая сохраняет не только родительскую модель, но и все зависимые. И такую же, которая загружает модель, все зависимости, а потом устанавливает эти зависимости. Причем foreign key применить не получилось потому что есть модели, которые хранят ссылку друг на друга и при сохранении получается этакий deadlock т.к. в базе еще нет нужных айдишников. Массивы и другие поля с примитивными данными конвертировал в json строку через TypeConverterы и сохранял как текстовое поле, соответственно при загрузке json парситься обратно в нужную структуру. Доки и примеры везде кастрированные с простейшими моделями. Более-менее нормальные примеры нашел только у commonsware https://github.com/commonsguy/cw-androidarch
>>1042905 >просто мокаешь второй девайс тогда выходит, что я мокаю свой механизм соединения и тестирую только UI, а мне важно протестировать само соединение, что девайсы действительно коннектятся и передают данные друг другу, это наверное было не совсем ясно с мого вопроса.
Какое минимально окружение нужно для сборки приложения? Есть проект (из студии), его периодически кому-нибудь надо собирать. Собирается gradle и скриптами. Насколько я понимаю. нужно только сдк. На девелопер.андроид.ком оно только вместе со студией, а она нафиг ее нужна. Как стащить только необходимое для сборки? С установленным сдк тоже есть проблемы: надо принять лицензионное его соглашение (а гуй в студии) и указать путь к нему в local.properties. Как это все автоматизировать? CI же наверняка для андроида пилят, как там эти проблемы решают?
Error:Conflict with dependency 'junit:junit' in project ':app'. Resolved versions for app (4.10) and test app (4.12) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Анончик, помоги! Нихуя не могу найти, как это пофиксить.
В dependencies build.grandle (Module:app) у меня это:
>>1045280 как ты заебал со своим румом, нахуй ты его вообще юзашешь если у тебя каждый день какие-то ебучие вопросы возникают? юзай что-нибудь старое, которое уже обсосали со всех сторон пидор блять
>>1045297 Охуеть у тебя там пекло. 2 вопроса задал всего лишь и на те ты, хуйло, не ответил. > юзай что-нибудь старое Ты же мне и по старому не пояснишь, мелкобуква. А теперь скажи, нахуя мне юзать что-то другое, если room дает полную свободу и контроль без магии над бд как с кастомным sqlitehelperом, но без ебучих портянок бойлеплейта? Потому что хуй с харкача загорелся без причины?
С вопросом я опять таки разобрался без твоих хуегорений, но то, что room при компиляции не показывает в каких dao\entity ошибки - реально неудобно, приходится их все перепидоривать на предмет багов. И есть можно как то эту инфу отображать, мне хотелось бы знать.
>>1045366 Потому что есть жёсткая привязка к SQLite. Потому что кастомный хелпер даёт больше возможностей например, сторайошный. Потому что альфа-версия в продакшене не катит. Потому что RxJava 2 на продакшене - это уже 2018, а то и 2019. Потому что убогое говно из нативных запросов не заменено ни каким апи, просто перенесено в аннотации. Потому что не придумали вменяемого описания агрегирующих функций. Потому что нет удобного описания таблиц для связей.
Сап! Есть желание вкатиться в фриланс под Андроид. Не совсем с нуля. Сам я так-себе вебразраб, недавно студентота, знания кое-какие есть, портфолио толком нет. Под ведро умею делать и делал простенькие проги, вроде распарсить сайтик jsoup'ом, вывести список картинок из инета picasso, вывести маршруты всякие на вебвью из яндекс-карт.
Во фриланс пытался вкатиться уже, но что-то идет туго, без смазки. Подскажи, анон, что надо еще выучить(видел часто упоминания в серьезных заказах о ReactNative, Dagger, Mockito), как надо вкатываться и, главное, куда? Наши биржи или буржуйские(с письменным инглишем более-менее, разговорный сложновато)?
И да, анон, заранее говорю - с подобной работой у меня в городе туго.
Есть ли альтернатива SqlDroid? Он глючный, я ебал (например, нельзя использовать в разных потоках с setAutocommit(false) без невиданных архиуебищных костылей), и к тому же сдох.
>>1045940 Так а хуле толку, эти пидоры уже и на уроках с телефона капчуют, а на переменах так вообще собираются и всем классом крутят рулеточку и рофлят со смешных мемчиков. Выродки блять, поколение выблядков и дегенератов.
сап посоны, вижу вы опытные ребзи. собрал сегодня первый хеллоуворд. вывел на экран пару мемчиков с оксимороном. есть вопрос: какие вещи в ондройде нужно шарить чтобы устроиться джуном хотябы на 1000-1500 баксов? алсо еще ищу ментора т.к. много чего еще не понимаю(до этого кодил только на турбопаскале) и нужен опытный наставник, с меня сотни нефти нихуя зато вам ценный преподовательский опыт))
также готов поконтрибутить в ваши проектики))
я в этом году пролетел с поступлением и теперь до сентября нужно срочно найти работу.
>>1046031 >какие вещи в ондройде нужно шарить чтобы устроиться джуном хотябы на 1000-1500 баксов? Тред читал вообще? Хелоуворлд - хуйня. Скорее всего не втянешь и за год без опыта технарской вышки на джуна андроида. Везде подразумевается как минимум знание JavaCore на 100%. Иди в обычную жаву сначала, там у тебя больше шансов.
> с меня сотни нефти нихуя зато вам ценный преподовательский опыт)) Ну и кому ты нахуй сдался учить тебя?
>школьники реально заебали ой, я у мамы два месяца уже не-школьник
олсо то что ты пролетел с поступлением намекает что ты не очень умный, не совсем понял что тебе реально нужно, можешь забить нахуй и уйти в жс через 2 месяца и учить тебя пришлось бы проблемнее и дольше.
Почему ORMLITE ебет мне мозги? Делаю все по гуиде, но ему абсолютно насрать на название колонок первичных ключей. Я пишу следующее:
@DatabaseField(columnName = "pizda", generatedId = true) private int pizda_id;
А он все равно называет эту колонку "id" и жалуется что не может найти колонку с именем "pizda". Вот ошибка: Unknown field 'pizda' from the Android sqlite cursor, not in:[pizda, ...]
И еще, пытаюсь сделать внешнюю переменную таким способом
@DatabaseField(foreign = true) private Huy huy;
но он тоже начинает кукарекать, что такой колонки нет (чсх ее и правда нет, потмоу что он не создает колонку huy_id, которую он должен создать).
Класс Huy аннотирован по всем понятиям. Таблицы создаю с помощью TableUtils.createTable(connectionSource, Huy.class); TableUtils.createTable(connectionSource, Pizda.class);
Есть один теоретический вопрос про WebView и фрагменты с ними. WebView сам по себе асинхронно загружает страницы, это понятно. Но у меня мои WebView находятся в нескольких фрагментах, один из которых в данный момент в состоянии onResume, а все другие - в onPause. Вопрос, будут ли все-равно WebView в фрагментах "на паузе" загружать страницы, если отправить коллбэк из другого класса?
Как-то можно получить размер Rect'a, который занимает подстрока в многострочном TextView? Я пробовал TextPaint.getTextBounds, но он все считает в одну строчку без учета переносов. Под ios есть NSLayoutManager.boundingRectForGlyphRange который делает именно то, что мне нужно
Двач, почему мой констрейнт лайаут идет по пизде? Стоят привязки все как мне надо, но если слишком большой текст в среднем текствью, то все идет по пизде по пикрилу. Можно ли сделать так, чтобы текст переносился на две строки, если не влезает в констрейнты? https://pastebin.com/cfGZAQjX
>>1046858 Теперь работает как надо, добра. Странно что по описаниям туторов, барьер - это просто хуитка, которая позволяет задавать констрейнт относительного положения от нескольких вьюх, а не от одной. Что в моем случае не нужно, но без барьера не работает.
>>1046927 продолжу ревью, так уж и быть -коммит месседжи твои - хуйня, в прошедшем времени никто не пишет, норм пацаны пишут в настоящем типо не added как у тебя везде там написано, а add просто -всё в одной ветке, я канечно понимаю что ты модешь отмазаться что ты один сам для себя пишешь, но всё же, это очень плохая практика даже когда один пишешь -структура проекта это просто полный пиздец, в есть пакет ui, но внезапно в пакете settings находишь какую-то активити, какого хуя она там делает? есть пакет utils, но в пакете application какого-то хуя куча утилсов лежат, какого хуя вообще? -ты нахуя вообще на котлине пишешь? ты блять ебанутый что ли? это пиздец, сука, у меня просто слов нет, нахуй ты все поля объявляешь с помощью вар и нулами их делаешь? блять, просто иди нахуй с таким кодом, я больше не могу на это смотреть
>>1046997 >всякую хуйню отревьюил, но ни за одно хуевое решение в коде не пояснил Ты сразу пиши кто сам: андроид-разработчик или менеджеришка-хуесосишка? Чтобы тот анон знал: прислушиваться к твоим советам или так, в пол уха кукареки улавливать.
>>1047058 а какая разница кто я? советы то максимально очевидны, любой джун согласится с каждым пунктом моего сообщения, а пояснять слишком много придется, пусть для начала исправит то, что я написал, чтобы его код хоть читать можно было, а потом уже и конкретнее можно будет посмотреть
Если я создаю обсерваблы в синглтоне, мне ведь по идее не нужно сохранять диспосабл для последующего удаления, да? Так как этот класс один хуй всегда в памяти будет, то течь не должно ничего. Или нет?
Кто-нибудь работал с osm на андройд? Что-то я нихуя не понимаю как можно скачать на телефон оффлайн кеш какого-нибудь города, может кто подкинет нужных ссылок? Да и вообще какого-то целостного понимания нет как оно работает. Я так понимаю сами данные openstreetmap - это просто набор структур типа нод, связей и т.д. с тегами инфорацией и всем прочим для какого-то региона. А тайлсорс - это какой то сторонный сервис, где вся эта поебень отрендерена и когда я устанавливаю в mapView тайлсорс MapInk, он просто качает и отображает картиночки от mapink?
>>1047434 во-первых ос ничего не особождает, этим занимается гарбаж коллектор, во-вторых даже он не сможет освободить, т.к. у тебя обзервабл будет выполнять какие-то операции и на него будет всегда ссылка. а вообще я не понимаю проблемы, разве так сложно сохранить диспосабл и потом "отписаться" если юзер вдруг всё ебнет?
>>1047519 Ну там проблема в том, что у меня создаются обсерваблы внутри сингла. Я отправляю файлы на сервер и хочу отображать прогресбар загрузки. Это сделано через кастомный RequestBody, который шлёт обсервабл через PublishSubject каждый раз когда в BufferedSink был записан очередной кусок файла точнее там по 3%. Так вот, сингловый диспосабл (который отправляет файлы) я сохраняю для последующего удаления (в onDestroy активити). А в каком моменте мне удалять диспосаблы созданные через PublishSubject не понятно.
>>1047519 >во-первых ос ничего не особождает Всмысле? Система говорит убить приложуху которая валяется в бэкграунде, весь процес грохается, вместе с этим закрываются всякие DbOpenHelper'ы. GC просто не за чем работать, процеса не будет.
>>1047530 Я бы посоветовал тебе сделать сервис, который когда надо запускается и плоказывает твой прогрес бар или что там в нотификации.
>>1047543 Я бы посоветовал тебе сделать сервис, который когда надо запускается и плоказывает твой прогрес бар или что там в нотификации. А если без нотификаций? Это хуёвая идея? Если мне нужно просто заблочить активити от юзера на время пока заливаются изображения на сервер. Пикрелейтед.
>>1047557 >А зачем блочить юзера? Ну, чтобы он не тыкал куда не надо пока заливаются фотки. В общем вот так решил сделать. doOnEvent должен вызваться в любом случае будь то обсервабл или эксепшон, там можно очистить CompositeDisposable я думаю.
>>1047530 ебать говнокодище, но одно я могу сказать точно, ты НИКОГДА не хочешь создавать обзервабл внутри обзервабала(сингла), запрос любой сложности можно сделать на стандартных операторах, так что у тебя явно что-то не так
>>1047608 >ты НИКОГДА не хочешь создавать обзервабл внутри обзервабала(сингла) Должно быть для этого есть какая-нибудь веская причина? И что значит на стандартных операторах? Я и так только стандартные использую.
>>1047617 блин, посмотри на свой код со стороны вообще, ты используешь рх, но это ебаное полотно невозможно читать. ребята, которые написали эту либу, специально придумали хуеву тучу операторов чтобы код был МАКСИМАЛЬНО ЧИТАБЕЛЕН, чтобы просто был вызов нескольких подряд операторов и вуаля, они внезапно делают то что тебе надо, твой же код это просто винегред какой-то, с таким же успехом ты мог использовать лоадеры/асинктаски обмазавшись коллбеками и было бы скорее всего даже читабельнее чем то, что ты наваял используя рх, понимаешь?
>>1047630 а вообще, я бы на твоем месте всё-таки запарился и нормально переделал, я понимаю, что это сложно, но когда сможешь понять идею, которая стоит за всем этим, то сможешь писать пиздец какой красивый код. попробуй разробрать свой таск на отдельные части и смотря сюда http://reactivex.io/documentation/operators.html написать все чисто на операторах, там есть десижн дерево, оно тебе поможет, состояний кстати внутри желательно тоже не иметь
>>1047646 Ну это уже как ты напишешь. Вот например у тебя допустим инжектится две штуки ApiClient и Dao. Получив результат ыапи ты хочешь засунуть их в дао, получается что-то в духе: apiClient.getResults().flatMap(this.dao::save) Не красиво однако, захват переменной и в другом треде, ничего страшного в данном случае, но уже пахнет. А можно сделать так что бы инжектились Observable<ApiClient> и Observable<Dao>, во-первых не будет тормозов когда это все создается, а во-вторых можно сделать так: apiClientObs.flatMap(client::.getResults).zipWith(daoObs, (results, dao) -> dao.save(results))
>>1047649 Окей, а если мне нужно отправить запрос А, получить ответ, если в ответе ошибка, то отправить запрос Б и если запрос Б пришёл без ошибки снова отправить запрос А, но с параметром из запроса Б?
>>1047440 Вроде того. Openstreetmap представляют только данные. Дальше нужно их отрендерить. Обычно есть тайловый сервер, который их рендерит. Это может быть сторонний какой-нибудь, а можно самому поднять. С mapView идут запросы к тайловому серверу, он возвращает картинки.
Второй вариант - рисовать сразу на устройстве в векторе. Так работает maps.me или osmand.
>>1047659 Если совсем не заморачиваться с publish или connect, то можно так: Observable<Params> paramsObs;//Observable/.just(params) например Observable<Result> resultObs = apiObservable.zipWith(paramsObs, (api, params) -> api.doRequestA(params)).share(); Disposable normalSub = resultObs.filter(result::isSuccessful).subscribe(this::processA); Disposable fallbackSub = resultObs.filter(result -> !result.isSuccessful()) .flatMap(apiObs) .flatMap(api::doRequestB, Pair::new) .flatMap(pair -> pair.first.doRequestA(pair.second.params)) .subscribe(this::processA)
Конечно с парой не очень красиво, но это можно опять же заменить на zipWith(apiObs, ...)
>>1047668 Да, разобрался. В есть йоба загрузчик кеша (CacheManager), просто указывается нужный тайловый сервер(тайсурс), баундинг бокс и zoom уровни. Можно еще ручками нарезать этих кешей и засунуть куда надо. Хотя почему-то дефолтная папка с кешами не меняется. Пробовал и Configuration.getInstance().osmdroidBasePath и tile cache. Один хуй в других папках не подхватывает. Хз, может ночью туплю. >рисовать сразу на устройстве в векторе. Так работает maps.me Я так и понял. Уж больно у них маленькие объемы данных для городов загружаются. Да и разные запросы к данным в проге можно делать, т.е. явно не голые картиночки.
Хотел бы я разобраться как они все это делают, но там у них какой-то кордкор на сях и jni. Сложновато для меня.
Поясните за xamarin. Я же могу без задней мысли использовать все классы стандартной библиотеки? Или нужно использовать биндинги андроида? Что-то не понимаю, этой инфы нигде нет.
>>1047911 >котлин ой лол Странно, что ты не упомянул REACT NATIVE Буду есть говно, но никогда не признаю что в майкрософт работают лучшие софтверные инженеры. Никогда не понимал этой упертости некоторых людей.
>>1047917 Ты не понел. Вот например, я создам вебреквест или FileStream. Он будет работать в андроиде как я этого ожидаю или нет. Как вообще моно там прикручен, это типа просто моно для линукса или что, там же наверняка в андроиде есть какие-то различия, где это можно почитать
>>1047923 >Странно, что ты не упомянул REACT NATIVE >Буду есть говно, но никогда не признаю что в майкрософт работают лучшие софтверные инженеры. Никогда не понимал этой упертости некоторых людей. Ты ведь не очень умный, да? Оставим толстоту про "лучших индософтваринжинеров". Но каким боком ты вообще приплел реакт найтив? Судя ответу ты не очень понимаешь как вообще все это работает, так хуле ты выебываешься, если у тебя даже не хватит знаний понять стоит перед тобой лучший софтвар инжинер или эникей-обрыган?
Основной фрейворк андройда написан на яве т.е. всякие высокоуровневые вещи типа фрагментов, активити, вьюх, активити менеджеров и т.д. Замарин просто биндит все это на сишарп и тянет дополнительно свой рантайм. И как ты не выебывайся своим шарпом, сверх того что позволяет ява ты не сделаешь т.к. в конечном итоге вся хуйня с фреймворка крутиться на jvm.
А теперь поясняй чем плох котлин? Не ололо, гавно от джетброент, а аргументированно и по пунктам.
>>1047944 >а аргументированно и по пунктам Каких пунктов ты ждешь от спермопетуха? Он скажет в духе: "Ну ита абертка над джавая и ваабще ни как в сисярпе бггг"
>>1047944 >А теперь поясняй чем плох котлин? Тем, что это очередной мертворожденный МОДНЫЙ)) велосипед от васянов. То, что понравилось васяну из jetbrains он добавил, а то, что не понравилось выкинул.
Если уж вам так чего-то не хватает в жаве, почему не сделать какую-нибудь супежаву, как, например, сделали майкрософт с typescript'ом - отличный язык, никто ничего не говорит плохого. Зачем придумывать заново все эти fun))))? ЧСВ заиграло?
Кстати, постоянно забавляет что идейные спермопетухи всегда уверены что у майкрософт все сделано лучше, краше и профессиональнее, хотя как правило ничего другого чтобы сравить не юзали(не хотят шкватиться), а все знакомство с другими платформами\технологиями заканчивается статьями вроде "why .net better than jvm". В то время как у джавабогов/сибогов/плюсобогов обычно гораздо шире кругозор и они всегда могут без идеологического хуеплетства пояснить чем та или иная хуитка лучше другой хуитки, а чем хуже. Мне было бы интересно узнать как происходит превращение в майкрософтораба. Эту загадку человечеству еще предстоит разгадать.
>>1047994 предлагаю тебе на досуге почитать про sdk и API для виндовсфонов приложений. в терминах инженеринга, это как феррари и ваз. Я конечно понимаю, что в гугле квоты и API пишут негры-трансексуалы, но блять. Нормальным же людям с этим работать.
>>1047981 Мне не нужно это читать, чтобы понимать. Я своим опытным взглядом оценил и понял, что это очередная инфантильная забава не стоящая в нее инвестиций. Намешали какой-то неюзабельной хуйни, с какого-то хуя перепасили весь синтаксис с нуля. Учите блять! Так серьезные люди не поступают. В этом jetbrains какие-то клоуны работают
>>1048038 Какие нахрен инвестиции? Прочитал 100 страничную документацию и все. Там нечего учить, если ты не вкатывальщик в ойти.
>>1048036 Маневры пошли. Про хорошесть апи и инструментария разработки на андройд я ничего не писал. Он то как раз, на мой взгляд очень хуевый. Но и это можно понять только попробовав что-то другое, в моем случае ios. Ну и конечно win32api и исходники xp в терминах инжинеринга и впрямь как феррари и ваз по сравнению с исходниками и api андройда. Андройд - феррари, уточню на всякий, а то мало ли.
>>1048062 прочитав 100-страничную документацию ты напишешь только hello world по туториалам. Чтобы нормально писать на языке и понимать его особенности, нужно в нем долго ковыряться.
>в моем случае ios это ты еще UWP не видел. Это сам боженька сошел с небес и поведал майкрософт как нужно сделать
>>1048072 >прочитав 100-страничную документацию ты напишешь только hello world по туториалам. Чтобы нормально писать на языке и понимать его особенности, нужно в нем долго ковыряться. Если ты знаешь платформу JVM - нет. Натурально взял и пишешь.
>>1048072 >Чтобы нормально писать на языке и понимать его особенности, нужно в нем долго ковыряться. Кардинальных нововведений там нет, если ты знаешь любой оо язык со статической типизацией, то перейти на любой другой оо язык со статической типизацией дело гугления как та или иная фича\концепция делается в новом языке.
>это ты еще UWP не видел. Это сам боженька сошел с небес и поведал майкрософт как нужно сделать Мне так знакомый макрософтоеб win32api лет десять назад посоветовал для гуев, когда я вкатывался, почти с такой же формулировкой. И я был уверен что так оно и есть, пока не попробовал нормальные вещи вроде qt, а потом и андроида. Так что иди ты нахуй. Слушать советы от майкрософтоебов хорошо если ты такой же зашореный майкроеб. Пройдет 2-5 лет, майки придумают еще какую-нибудь "прорывную" хуитку и будут на всех сайтах писать что сам боженька написал, а про UWP, WPF и прочую парашу все забудут, как это происходит уже давно с каждой их хм-кхм "технологией".
>>1048106 >Пройдет 2-5 лет, майки придумают еще какую-нибудь "прорывную" хуитку и будут на всех сайтах писать что сам боженька написал, а про UWP, WPF и прочую парашу все забудут, как это происходит уже давно с каждой их хм-кхм "технологией".
>>1048106 >про UWP, WPF и прочую парашу все забудут, как это происходит уже давно с каждой их хм-кхм "технологией". И это хорошо. Когда караван поворачивает назад, впереди всех оказывается хромой верблюд. То, что сейчас виндовсфоны непопулярны, заставлят МС искать новые решения. Когда ты лет через 5 вместо комьпютера будешь использовать свой телефон с андроидом, никто не вспомнит что именно майкрософт были пионерами в этом (континуум). Так всегда. Майкрософт сеит охуенные технологии опережающие время, а потом остальные собирают урожай.
Нормально ли вызывать методы активити из фрагмента? Или есть какие-нибудь другие варианты? Например у меня есть активити и в нём три фрагмента сменяющие друг-друга. В каждом фрагменте нужно заполнить какую-то инфу, и вся эта инфа аккумулируется в активити, а заполняется она вызовами активити методов из фрагментов. Нормальна ли такая схема?
>>1048710 А если идел вызов метода, который отображает другой фрагмент и в этот фрагмент передается только айдишники нужных данных, это не зашквар? Как вообще лучше всего делать роутинг если несколько 3-5 фрагментов, которыми управляет одна активити?
>>1048691 Абсолютно нормально. Только не напрямую методы активити дергай, а через интерфейс. Проверяй в onAttachActivity, что активити, к которой прикрепляется фрагмент, действительно реализует этот интерфейс.
>>1048766 >Проверяй в onAttachActivity, что активити, к которой прикрепляется фрагмент, действительно реализует этот интерфейс. В смысле? Типа ассерт делать чтоб случайно не тот фрагмент не подключить? Или там какая-то другая причина?
Вкатываюсь в андройд с явы, и нихуя не понимаю, что это за ошибка? > Error:(23, 24) Failed to resolve: com.android.support.test.espresso:espresso-core:2.2.2 > <a href="install.m2.repo">Install Repository and sync project</a><br><a href="openFile:C:/Users/hp/AndroidStudioProjects/Catalog/app/build.gradle">Show in File</a><br><a href="open.dependency.in.project.structure">Show in Project Structure dialog</a>
Решить-то решил, но теперь в новом проекте снова оно. Что это и откуда?
>>1049513 Ты знаешь что такое система сборки? Ты умеешь читать ошибки? Ращберу по частям: Failed to resolve: com.android.support.test.espresso:espresso-core:2.2.2 - система не нашала данную зависимость Install Repository and sync project - установи репозиторий (не очень понятное объясненние, но есть только один репозиторий который - саапортный, открой из студии сдк менеджер и установи что надо, или удали зависимость)
Как приплетать mvp если у меня в фрагменте viewPager? Pager работает как фильтр т.е. каждая вкладка - это итемы одинаковой категории. Нужно ли выносить его логику в контракт т.е. делать в интерфейсе mvpView методы типа showAllItems, showGovnoItems(), showMochaItems(), а в presenter allTypesClicked(), govnoTypesClicked, mochaTypesClicked() и выносить события из pagerAdapter или все это пускай остается внутри viewPagerа?
>>1050559 Зависит от того, что тебе надо делать с ними. Если у тебя есть логика взаимодействия вкладок между собой, и остальным экраном - нужно хэндлить события извне.
>>1048810 Сразу видно долбоёба. Юзанёшь эвентбасец -> фрагмент будет слишком сильно отвязан от активити, придёт васян и сунет его в другую, потом очень долго копать говно, и почему не работает. Репозиторий - очевидный оверинжиниринг, если у тебя ни один фрагмент не содержит своей внутренней логики похождений на сервер
В случае, когда у тебя фрагмент играет роль элемента вьюхи - нужно пилить newInstance с интерфейсом
>>1048691 > Нормально ли вызывать методы активити из фрагмента? Нормально, но в твоем случае нет. Очевидно, что у тебя идет работа данными, а значит кидай в дата слой. Нормально вызывать, когда тебе нужно что-то с активити сделать в качестве вью: коллапсинг лэйаут там отключить, экшнбару тайтл задать и прочее подобное.
>>1050677 Вася, в чём твоя проблема? 1) Не можешь сверстать макет для планшета с парой контейнеров? 2) Не можешь продумать, что у тебя при любой ориентации можно спокойно держать несколько фрагментов в активити, а как их показывать - вопрос ориентации?
Нет, конечно - на реальном проекте нужны только активити-пустышки-контейнеры для фрагментиков. Что твой фрагмент должен делать, если его вызвали не из того места, и в репозитории нихуя нет? Как на "реальном проекте" откатываешь репу при возврате на предыдущий фрагмент?
Аноны, а можно ли сделать приложение, чисто под один сайт? К примеру, при закрытии сайта в браузере происходит выход из аккаунта на сайте. Наверняка в приложении такого бы не было.
>>1051530 > Ну можешь сделать конечно, Мне бы найти того, у кого эта вся ебала развернута на машине, и который за спасибо сделает два телодвижения. Если не найду, то на досуге попробую сам сделать.
>>1051502 Да, можно. Приложение вк, фейсбука это и есть приложения под один сайт. Нативные они потому что используют не html странички сайта, а андройд компоненты типа кнопок, листов и т.д. Тебе нужен нормальный rest api к сайту, если сайт генерит странички на сервере то угадай кто сосет. Конечн можно сделать отдельный вебвью в отдельном приложении специально для сайта, но это какая-то дичь и бессмыслица. Ну и на два телодвижения даже не расчитывай.
>>1051673 > Ну и на два телодвижения даже не расчитывай. Вот обидно то! И да, я имел ввиду что-то типо > Конечн можно сделать отдельный вебвью в отдельном приложении специально для сайта, но это какая-то дичь и бессмыслица.
Суть такова. Я люблю обмазываться вёрсткой по гидлайнам и дрочить. Так вот есть один ебаный SearchView, который добавляется в Toolbar в onCreateOptionsMenu. Этот сречьвью когда в активном состоянии выбивается из сетки аж на целых 16dp. Т.е. у нас есть тайтл в тулбаре который от левой границы экрана находится в 72dp, а ебучая граница начала поля ввода у сречьвью в 88dp! Что пидорасит всю хуйню! Кто знает как победить? Кастомно пихать серчвю в тулбар не хочу.
>>1051365 Всё-таки рано я обрадовался. Теперь постоянно откуда-то берётся onComplete ивент из-за которого PublishSubject перестаёт принимать обсерваблы. Хуй вообще знает откуда он берётся и чё с этим делать. Сделал аналог, чтоб потестить - https://pastebin.com/QCCuJ22k
Если в sendRequest передавать GOOD_SESSION_ID, то всё ок, onNext в responseSubject вызывается. Однако, если поменять GOOD_SESSION_ID на BAD_SESSION_ID, то в таком случае после sendRequest сразу откуда-то берётся onComplete. Вот откуда он берётся и как это пофиксить, может кто подскажет?
>>1052137 Окей, кажется нашёл, что вызывает onComplete. Observable.toList() Теперь, по идее, осталось переписать без использования toList() или любого другого оператора который вызывает onComplete. Возникает вопрос - может есть какой-то оператор для фильтрации ивента onComplete?
Вкратце проблема: что бы я не делал и как бы не ебался - BluetoothSocket#connect() всегда выкидывает такое говно:
java.io.IOException: read failed, socket might closed or timeout, read ret: -1 W/System.err: at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:581) W/System.err: at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:558) W/System.err: at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:374)
Дедлайн очень и ОЧЕНЬ скоро, а этот проебос мне портит всю жизнь (ога, без подключения то функционал не протестировать особо...). Буду признателен за любую наводку на причину проблемы.
Сап программач веб программист с большим стажем, вкатываюсь в ондройд. В связи с этим тупые вопросы:
Вот у меня есть drawlerLayout у него внутри инклудится @layout/app_bar внутри app_bar инклудится @layout/content_main
Дык вот я нажимаю пункт меню в этом самом дравлере и хочу чтобы вместо content_main заинклудилось что то другое. Как мне это сделать ? Я могу использовать setContentView(); но тогда мне придется продублировать @layout/app_bar и корневой drawlerLayout, а я же не совсем дурак понимаю что это плохо.
>>1052297 Разобрался. В общем помогла либа RxRelay.
Apollo GraphqlАноним28/08/17 Пнд 18:46:39#411№1052762
Есть ли кто использовал Apollo Android в своих проектах? Нужна помощь в использовании данной библиотеки. Нужно разобраться, как составить файл scheme.json и как его применить. В официальной документации представлена неясная для меня инструкция по созданию необходимого файла.
Хочу сделать кастомизацию цветов некоторых элементов интерфейса в настройках приложения. Как это лучше всего сделать? Первое что приходит в голову - это сохранять цвет в преференсес и вместо ContextCompat.getColor() брать из преферес, но не будет ли тут проеб в производительности?
>>1052874 Ну это два разных реквеста (название переменно не поменял прост), но результат будет всего один - либо сразу ErrorCode.OK, либо сначала ErrorCode.BAD_SESSION_ID, затем релогин, вторая отправка запроса, и потом в 99% случаев ErrorCode.OK. Как мне их ещё в один объединить?
>>1052836 Так это же просто програмный доступ к атрибутам темы, а мне надо чтобы пользователь мог установить свой цвет в настроечках(транспортная прога и в зависимости от типа выбранного транспорта меняются цвета интерфейса, я хочу чтобы пользователь мог менять цвета типов транспортов: троллейбус, автобус и т.д.). Темы я поэтому не использую. Дефолтный айдишник цвета захардкожен в энуме типов транспорта, пока придумал делать что-то типа синглтон прокси класса Colors. Который в onCreate в аппликейшн загружает все переопределенные и дефолтные цвета и отдает переопределенный цвет, если он есть, или дефолтный. А везде где берется цвет транспорта использовать getColor этого класса. Но я не знаю насколько это зашквар. Впрочем каждый раз брать из преференсов думаю было бы еще зашкварнее
Гайз, посоветуйте дауну - как лучше сделать задержку в развитии в асинктаске и не положить основной поток? Обычный "тред.слип" ложит UI, а хандлер ругается, да и можно ли им в асинктаске шурудить?. Сори за нубство.
>>1054670 >Обычный "тред.слип" ложит UI, Doing it wrong. Код кидай живо, блять, щас тут убивать нахуй будем. В doinbackground надеюсь слип вызываешь? runInMainThread внутри используешь?
Кто-нибудь работал с блютузом? А именно с bluetooth LE. Нужно как то подключиться к устройствам, что шлют адвертайз пакеты и их распарсить, я чет вообще не могу сообразить как это сделать. Помогите пожалуйста.
Антуаны, наверняка ведь есть онлайновые сервисы, которые позволяют потестить свою приложуху на разных железках и осях. Кто пользовался, посоветуйте, плиз. А то меня терзают смутные сомнения насчёт производительности моей нативной либы.
Андроны, в 2017 году как лучше делать разметку для этого пиздец какого огромного кол-ва разных ебанных экранов? layout-mdpi, hdpi, xxdpi? Так я больше экранов охвачу?
>>1054873 сделай нужное поле публичным и получай сколько влезет. а вообще, ты доки асинктаска читал? где онПостЭкзикьют метод? и ещё, ты пытаешься получить данные в ui треде, которые обновляются в бэкграунд треде, не думал что это обновление занимает время? и что ui тред когда запросит нужные ему данные обосрется? т.к. там ещё нихуя не будет записано. кароче вам двойка, переделывайте
>>1054873 Ебать дичь, иди разбирайся что такое асинхронный вызов и как работает многопоточность. У тебя в postExecute асинктаск должен делать все, что ты сейчас пытаешься сделать в try потому что когда ты вызываешь execute твой код выполняется в другом потоке и закончит через некоторое время, после чего будет вызов функции onPostExecute в главном(ui) потоке, в котором ты сможешь обновить кекстВью своими охуительными историями.
Посаны, а есть ли какой-то способ сделать radiobutton c autofit текстом? Для своих textview использовал левую библиотеку, а вот для радиобатанов такого не нашел. Ситуация такова, есть четыре кнопки с определенной высотой, в них передается текст разной длинны, и в некоторые кнопки он не помещается. Хуита.
Сап, есть инт обернутый в ЛайвДату. Нужно привязать к нему рх что бы после того как значение не изменялость три секунду емитить его дальше. Как это запилить? Вроде debounce нужен,правильно?
Анон, вопрос. Мне надо, чтобы приложение переводило определенную сумму денег с карты одного пользователя на карту другого. In-app billing по этой причине использовать не получится. Есть ли какая-нибудь либа для этого? (Опционально: как ее сдружить с Firebase\Backendless?)
Программирую интернет магаз. Как сделать лучше загрузить сразу с сервака весь каталог товаров около 4к штук при загрузке приложения или загружать товары и категории последовательно при их открытии?
>>1055717 >Чиво блять? Есть radiobutton с определенной высотой, и есть текст который висит на этом радиобатоне который не влезает на сам батон, а уходит за него. Спасибо за наводку, но эта хуита для 26-го апи, они ебанулись совсем, такую простую фичу не добавить раньше и для старых апи. Нашел такую ебань для textview https://github.com/grantland/android-autofittextview . Но для радиобатона, не могу найти.
Теперь возникла другая проблема. Как определенные блоки кода заставить работать на разных Layout'ах? Допустим для xxhdpi, мне нужен больше текст чем для mdpi. Помоги Ананас
>>1055945 Чукча писатель? Там написано что через сапорт либ это начиная с 14 можно сделать. Ресурсы можешь указывать так же как лэйауты епт: values-mdpi/dmens.xml, values-xxxhdpi/dmens.xml....
>>1055963 Спасибо за помощь няша. Пытаюсь заставить это дерьмо работать, но вот какого хуя нету нихуя этих методов ? >TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType) >TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
есть 2 активити, один из них чайлд другого. это указано в манифесте, то есть кнопка назад появляется автоматически, но при нажатии на нее анимация идет не справа налево, а наоборот. при нажатии системной кнопки назад идет правильная анимация. почему так? и чтобы это починить обязательно писать свой xml с анимацией или есть встроенные?
>>1056225 какая кнопка назад появляется автоматически? кнопки обычно автоматически не появляются. а если ты хочешь сделать тоже самое что делает системная кнопка, то что тебе мешает вызывать тот же метод, что вызывается при нажатии на системную кнопку?
в манифесте: android:parentActivityName=".MainActivity" после этого сама по себе появляется кнопка назад в верхней панели (пикрелейтед) >>1056265 ничего, просто интересно почему именно такое поведение
Но не смог прикрепить ее к радиобатонам, просто напросто нихуя не происходит. Делал вот так. Хуйня походу. Теперь ищу какое-то другое решение. Если ресурсы указывать через values-mdpi, это же будет тоже самое что я просто укажу размер шрифта в layout-mdpi? Нахуй мне тогда values создавать?
>>1056577 А чего повторять? Ну вот у меня допустим layout-mdpi, hdpi,xdpi,xxxdpi, хуйdpi и там в радиобатоне разного размера текст mdpi- 8, hdpi - 12 и так далее епт. И будет у меня value-mdpi допустим. Так там же я буду указывать размер шрифта 8 для моих батонов, так ведь? Так нахуя оно надо? Я просто не верю что нету адекватного решения для такой простой проблемы как авто фиттинг под размер ебанной кнопки. Ну как так сука? Это же первое что надо было делать, при таком то количестве разрешений, размеров экранов, и прочей ебалы.
Двач, почему в нете так много статей про вложенные фрагменты в фрагменты во фрагментах внутри фрагмента и героическое преодоление их проблем, да и в целом вся эта возьня с фрагметами? Что такое может фрагмент, чего не может кастомный view?
Делаю toolbar вместо actionbar. До этого цвет иконок и текста в панели был белый, теперь черный. Стиль вроде бы тот же. Как эту хуйню покрасить в белый, ананасы?
>>1057085 А разве это не колхоз? И еще мне требует с довольно точной задержкой отправлять данные, а если ложить поток, то какой-то хуя вылезают расхождения во времени - записи в бд появляются в разный интервал времени, а не в заданный.
АНАНАСЫ, как мне обращаться к инклюженному лэйауту? То есть у меня есть toolbar в отдельном лэйауте, я его инклюжу как на пикрелейтед, а потом хочу, чтобы TextView через Constraint привязывалось к его низу. Как такое сделать?
Сап. Пилю приложение для смартфонов 4.2+, которое должно взаимодействовать со смарт-браслетом, брать с него данные датчика сердцебиения и выводить на экран. Разобрался как делать блютус-соединение норм, подключаться к устройствам, etc., а вот как с браслетом взаимодействовать хз. Через UUID, по идее?.. Короче, если кто-то кинет чего почитать на эту тему, буду крайне признателен, потому что в гугле какая-то ебола только, а сдавать проект нужно уже завтра.
>>1048695 Взаимодействие между фрагментом и активити идёт или через коллбэки, или (если у тебя нормальная архитектура) вообще через презентер на уровне "эвент на фрагменте" -> "обработка на презентере" -> "коллбэк с презентера в активити".
>>1057356 Тащемта, никаких секретов нет, просто берёшь и записываешь в дескрипторы характеристик нужные команды, а потом слушаешь изменение других характеристик. На developer.android.com была подробная статья про BluetoothLeGatt с примером в репозитории. У всяких таких девайсов есть подробная документация с описанием, какие именно характеристики там есть, что туда можно посылать. Heart Rate Characteristic вообще, если я правильно понимаю, имеет стандартизированный константный для всех девайсов UUID, можешь тупо с гуглосэмпла код копипастить.
>>1057361 Огромное спасибо, ты даже не представляешь, как сильно мне помог. Тем более, что на девелопер-андроиде даже в тестовом проекте почти всё сделано как мне надо, похоже. Не знаю даже, как тебя отблагодарить, так что вот тебе просто анимешную бабу.
>>1057414 Сделай лучше Сперва добейся Нас вообще долгое время на доске не было, кушайте что есть, шапка ближе к выходным будет. Может прежний ОП умер в зоне ЗАЩО.
Стоим велосипеды на костылях, пока грейдл недовольно урчит, делимся фреймворками. Очкастой бабы на превью больше не будет.
SON YOU ARE A DEVELOPER NOW