Unat
Я понимаю, что ты имел ввиду, но нельзя допустить чтобы кто-то тут подцепил неверное понимание терминологии
Konstantin
как ту сказали где то, функции с низкой социальной ответственностью
Сергій
У меня просто глобальные функции
Unat
С неявным обращением к статическим объектам...
Konstantin
а про такое что думаете?
val Int.dp: Int
get() = (this / Resources.getSystem().displayMetrics.density).toInt()
тут кто то говорил что типа может быть проблемой такое обращение к плотности экрана
Сергій
Я использую тоже, да и в анко есть. Только не вычисляю сам значение, для этого есть апи
Ivansuper
Анко не пример идеала
Сергій
Ничто не идеал, всё подбирается по требованиям 🌝
Unat
мне кажется, что экстеншены к примитивам - не очень правильная практика
Konstantin
а как думаешь короткий код это лаконичный код?
Unat
нет
Konstantin
а я думаю да
Konstantin
поэтому мне такие сокращения нравится а тебе наверное нет
Сергій
Можно экстеншен функцию написать к контексту
Unat
а я думаю да
но ведь короткий код - это короткий код, а лаконичный - это лаконичный. Это не синонимы. Короткий код может быть запутанным, небезопасным и труднорасширяемым точно так-же, как и наоборот.
Konstantin
вообще андроид рвет поначалу мозг, когда надо писать монструозные конструкции для простых вещей
Konstantin
и постоянно такое ощущение что хочется чего то попроще, покороче, попонятнее и в одну строку )
Turalllb
Подскажите, если нужно по клику с анимацией увеличить на весь экран изображение, а по обратно клику свернуть. ТО лучшая реализация заключается в том, чтобы иметь в макете увеличенное изображение с View.Gone и с анимацией его показывать ? А изображение которое есть в макете с View.Gone не жрет ресурсы?
Unat
ну так напиши функцию Resources.sizeDp(size: Int): Int - она будет явно указывать на то, что перевод единиц происходит через ресурсы, а не через магические константы
Konstantin
если бы я хотел писать вербозно - взял бы джаву
Alexey
можно как в анко dp(Int)
Сергій
Alexey
самое очевидное
Unat
Вот вы приводите в пример анко... а покажите сигнатуру той функции.
Сергій
А вообще есть родное TypedValue
Сергій
куда уж очевиднее
Unat
fun Context.dip(value: Int): Int = (value * resources.displayMetrics.density).toInt() - вот так выглядят dip в Anko
Unat
и перегрузки для View, AnkoContext и Fragment
Unat
Вообще, экстеншен функции в котлине, если присмотреться, не используют для своих вычислений ничего, кроме this и аргументов - и это чертовски важное условие обеспечения "безопасности".
Anonymous
Кому-то блокировали AdSense? Мне отключили( За недействительный траффик. Но я не кликал по своей рекламе. Единственное, она просто показывалась, ведь я открывал свое приложение с того же аккаунта. Наверное за это. Что с этим можно сделать?(
Anonymous
Но никаких писем на почте не приходило. Я просто зашёл проверить свой адмоб как-то раз и обнаружил, что аккаунт отключен
Anonymous
Там так написано
Anonymous
Но про это ни слова не было. Было только написано, что нельзя кликать. Может кто-то сталкивался?
Anonymous
Хотя почему это недействительный траффик. Я даже не знаю за что толком. Просто написано ваш аккаунт отключен. Без каких-либо объяснений. И на почту, повторюсь, ничего не приходило.
Николай
public void create(String title, String description, boolean completed) {
Todo todo = new Todo();
if (title.length() <= 1) {
todo.setTitle(title+" This string is Empty");
todo.setDescription(description);
todo.setCompleted(completed);
todo.setEdited(new Date().getTime());
interactor.create(todo);
Toast.makeText(context, "Saved", Toast.LENGTH_SHORT).show();
}
else {
todo.setTitle(title + " 222");
todo.setDescription(description);
todo.setCompleted(completed);
todo.setEdited(new Date().getTime());
interactor.create(todo);
Toast.makeText(context, "Saved", Toast.LENGTH_SHORT).show();
}
view.finishView();
}
Николай
помогите кто нибудь ... не работает как надо
Николай
вместо перезаписи оно делает копию + перезапись
Николай
1 -> edit to 2 -> 1 , 2
Dyno
ну проблема явно где-то не в этом коле
Dyno
что там? interactor.create(todo);
Anonymous
https://jobfinder-hessen.de/stellenangebot/karosseriebauer-m-w-oder-landmaschinenmechaniker-m-w-7QSP2F
Vitaly
На сколько я понимаю, если Service в отдельном процессе, то его нельзя запустить через bindService(), а так как в Android O, службы сильно порезали, то ситуаций, когда может понадобиться такая служба нет, верно?
Получается остались только Foreground Service, которые изначально выполняют какую-то очень тяжёлую важную работу, которая изначально требует отдельный процесс (например проигрывание музыки), а значит и потребности в bindService нет?
Alexey
На сколько я понимаю, если Service в отдельном процессе, то его нельзя запустить через bindService(), а так как в Android O, службы сильно порезали, то ситуаций, когда может понадобиться такая служба нет, верно?
Получается остались только Foreground Service, которые изначально выполняют какую-то очень тяжёлую важную работу, которая изначально требует отдельный процесс (например проигрывание музыки), а значит и потребности в bindService нет?
Можно, просто с о сервисы без запущенного приложения должны стартовать с foreground
Alexey
Для биндинга как раз нужен aidl
Alexey
*межпроцессное. Ну да
Vitaly
*межпроцессное. Ну да
А отличия в том, что один синхронный, а другой асинхронный => AIDL быстрее?
Alexey
Бродкаст только от сервиса, aidl - туда сюда
Vitaly
Опять начинаю путаться, зачем делать bindService, если этот Service будет работать только пока он привязан к какой-то Activity, если гораздо проще тогда создать отдельный поток для выполнения задачи внутри Activity или внутри приложения?
Alexey
Alexey
https://m.habr.com/ru/post/349102/
Vitaly
Сервис может работать дальше когда unbind сделаешь
Проверил, действительно работает дальше (если конечно выделяю отдельный поток), но при unbind Service уничтожается и при следующем bind Создаётся новый Service
Скорее всего что-то не так делаю
Alexey
ltnay
Всем привет, значит есть активити, в ней viewpager с ботом навигацией, каждый пейдж фрагмент со своим внутренним стеком, есть пейдж корзина (фрагмент) с ресайклер, есть пейдж каталог с ресайклер, в каталоге можно добавлять товар в корзину по нажатию на кнопку у итема ресайклера. Я хочу обновить ресайклер корзины при нажатии кнопки и успешного выполнения запроса с фрагмента каталога или же обновлять при переходе на фрагмент корзины, но не совсем понимаю как мне тригерить обновление в корзине при выполнении запроса на сервер при добавлении из каталога. Корзина удаленная, по апи. MVP. Спасибо!
Alexey
Владислав
всем доброго дня!!!
Владислав
Ребята киньте кто нибудь простинькую программу, а точнее код для того что бы затестировать среду разработки
Владислав
Можно в тхт если что
Проксимов
Vitaly
Проксимов
Ещё проще руками кинуть кнопку и текствью. Что там тестировать то?
Владислав
А джаву/Котлин ты знаешь?
Вступления только начал читать, мне вчера только нормальные ссылки на обновленные версии кинули
Vitaly
Я даже не знаю что это)
Это удалённый репозиторий, в который программисты кидают свой код
Если не знаешь что это, то зайди на StartAndroid, там будет проще
Владислав
Так смысел весь заключается в том что бы затестить среду на своем компе правильно и коректно всё ли работает
Проксимов
Владислав
Ruslan
Товарищи, посмотрите пожалуйста код. тут рх, но вопрос не в рх.
Сначала делаю запрос в сети, получаю его, мапаю в удобные объекты, записываю в базу полученные элементы, после этого из базы беру элементы и вывожу на экран. вот этот момент смущает
dao.insertEvents(events).andThen(dao.getEventList())
надо ли дожидаться окончания записи в базу и только потом выводить на экран? или сразу выводить на экран и начинать писать в базу?
disposable += service.getEvents()
.subscribeOn(Schedulers.io())
.map { eventsResponse: List<EventResponse> ->
mapResponseToEventList(eventsResponse)
}
.flatMapSingle { events: List<EventItem.Event> ->
dao.insertEvents(events).andThen(dao.getEventList())
}
.map { events: List<EventItem.Event> ->
groupEventsByDate(events)
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ groupAdapter.addAll(it) },
{ Log.e(TAG, it.message, it) }
)
Ferrero
Товарищи, посмотрите пожалуйста код. тут рх, но вопрос не в рх.
Сначала делаю запрос в сети, получаю его, мапаю в удобные объекты, записываю в базу полученные элементы, после этого из базы беру элементы и вывожу на экран. вот этот момент смущает
dao.insertEvents(events).andThen(dao.getEventList())
надо ли дожидаться окончания записи в базу и только потом выводить на экран? или сразу выводить на экран и начинать писать в базу?
disposable += service.getEvents()
.subscribeOn(Schedulers.io())
.map { eventsResponse: List<EventResponse> ->
mapResponseToEventList(eventsResponse)
}
.flatMapSingle { events: List<EventItem.Event> ->
dao.insertEvents(events).andThen(dao.getEventList())
}
.map { events: List<EventItem.Event> ->
groupEventsByDate(events)
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ groupAdapter.addAll(it) },
{ Log.e(TAG, it.message, it) }
)
Запросы к базе синхронные вроде бы, нет?
Ferrero
Блок andThen выполнится только после записи
Ruslan
Блок andThen выполнится только после записи
запросы в рум нельзя в главном потоке делать.
andThen да, выполняется после завершения комплитабл.
вопрос в том, надо ли дожидаться комплитабл и выводить записанные данные из базы, или можно в два места сразу и в базу и на ui отправлять? не дожидаясь окончания записи в базу и не вытягивая данные оттуда
Ferrero
А у объектов есть первичный ключ? Он генерируется или прилетает в апи?