Сергей
От любого, получившего возможность доступа к соотв каталогу, кроме имеющего ключей. /исходим из того что приложение дизассемблировано, все методы известны и кто то может замаскироваться под его пользователя/
Denis
тут вся загвоздка в методе который делает проверку данных. Если я хочу через интерактор, то он должен сперва в бд сходить, потом в сеть, потом проверить данные и снова в бд и в презентер. Получается, что репозиторий я лишил всякой логики и по Solid и согласно всем принципам, это верно. В репозитории допускается всего лишь немного логики, если приложение не большое. А я вот сейчас уберу всё в интерактор. И .. ооо.. и все четко. Единственное, надо над Rx подумать. Я от него профита никак получить не могу)) Когда из репозитория вернется Observable мне надо из него там же данные вытащить для проверки. Потом снова в Observable обернуть и бд(доп. поток) и в презентер послать. И презентер и бд тоже должны будут реализовывать observable . Че то куча реализаций observable , на каждом шагу вытащи данные, упакуй.. Видать я еще не въехал в идею Rx
у тебя есть поток данных, с ним и работай
Mike
тут вся загвоздка в методе который делает проверку данных. Если я хочу через интерактор, то он должен сперва в бд сходить, потом в сеть, потом проверить данные и снова в бд и в презентер. Получается, что репозиторий я лишил всякой логики и по Solid и согласно всем принципам, это верно. В репозитории допускается всего лишь немного логики, если приложение не большое. А я вот сейчас уберу всё в интерактор. И .. ооо.. и все четко. Единственное, надо над Rx подумать. Я от него профита никак получить не могу)) Когда из репозитория вернется Observable мне надо из него там же данные вытащить для проверки. Потом снова в Observable обернуть и бд(доп. поток) и в презентер послать. И презентер и бд тоже должны будут реализовывать observable . Че то куча реализаций observable , на каждом шагу вытащи данные, упакуй.. Видать я еще не въехал в идею Rx
идите со своими фабричными фабриками в @Android_Architecture, а здесь люди приложения разрабатывают
Сергей
Включая от меня как админа базы firebase). Мне приватный и сеансный ключ неизвестны
Turalllb
если хочешь использовать Rx, то лучше сначала разобраться, как он работает
честно разбирался. Вроде бы всё ясно, начинаю писать и приехали. Сейчас попробую еще раз, спасибо
Turalllb
идите со своими фабричными фабриками в @Android_Architecture, а здесь люди приложения разрабатывают
окей, я думал будет короткий вопрос ответ, а тут такая штука получилась)
Сергей
Ну мало ли кто мой гугль пароль хакнет
Vadim
Тебе что сделать-то нужно?
хочу в тестах проверить наличие markupa Вот есть переменная котороая парсит в HTML var spannedMessage = "<a href='https://www.some.com/'>Some</a>".parseHTML() я проверил что мол так и так возвращает значение в тэге assertThat(spannedMessage.toString(), equalTo("Some")) а сейчас хочу проверить что то типа assertThat(spannedMessage.getSpans(0, 20, ????????), equalTo(????))
Сергей
Да и зачем мне даже теоретически знать чью то локацию
Alexey
тут вся загвоздка в методе который делает проверку данных. Если я хочу через интерактор, то он должен сперва в бд сходить, потом в сеть, потом проверить данные и снова в бд и в презентер. Получается, что репозиторий я лишил всякой логики и по Solid и согласно всем принципам, это верно. В репозитории допускается всего лишь немного логики, если приложение не большое. А я вот сейчас уберу всё в интерактор. И .. ооо.. и все четко. Единственное, надо над Rx подумать. Я от него профита никак получить не могу)) Когда из репозитория вернется Observable мне надо из него там же данные вытащить для проверки. Потом снова в Observable обернуть и бд(доп. поток) и в презентер послать. И презентер и бд тоже должны будут реализовывать observable . Че то куча реализаций observable , на каждом шагу вытащи данные, упакуй.. Видать я еще не въехал в идею Rx
не оч понимаю зачем тебе в презентере чето проверять и обратно в интерактор отправлять. Ты же можешь в том же методе запроса данных все проверить сделать и в презентер уже готовые данные вернуть
Mike
нет Junit
андроидные классы не работают в нормальных тестах
Vadim
андроидные классы не работают в нормальных тестах
окей как же мне проверить что мой spannedMessage содержит markup?
Turalllb
не оч понимаю зачем тебе в презентере чето проверять и обратно в интерактор отправлять. Ты же можешь в том же методе запроса данных все проверить сделать и в презентер уже готовые данные вернуть
не писал такого. проверяет так же интерактор. и шлет в бд и в презентер готовые данные. Мне только осталось это всё дело rx внедрить. Хочу понять в чем профит от него. например в бд в доп. потоке писать , а в презентер в главном возвращать. Пойду блюпринты с rx смотреть. А так остальное вроде уложилось в голове, спасибо
Vadim
какойнить assertThat(spannedMessage.getSpans(0, 20, LinkSpan::class.java), equalTo(LinkSpan(href = "https://www.some.com/", body = "Some")))
а LinkSpan откуда мне взять?) создать пустышку? потому как не могу его заимпортить
Mike
окей как же мне проверить что мой spannedMessage содержит markup?
не понимаю, зачем, но не думаю, что ты первый человек в интернете, которому хочется странного :)
Alexey
а LinkSpan откуда мне взять?) создать пустышку? потому как не могу его заимпортить
я хз, может ты какую либу взял в зависимости и её тестируешь) Тогда в этой либе поищи такой спан
Vadim
не понимаю, зачем, но не думаю, что ты первый человек в интернете, которому хочется странного :)
ну потому что метод должен тестироваться и на наличие тегов, что тут необычного?(
Mike
ну потому что метод должен тестироваться и на наличие тегов, что тут необычного?(
необычно, что ты пытаешься протестировать Android SDK, а не свой код
Turalllb
ты без rx тоже писал бы в бд в доп потоке)
нет, я в главном в sqLite пишу. все норм работает. ) наверно потому что объемы данных небольшие
Mike
нет, я в главном в sqLite пишу. все норм работает. ) наверно потому что объемы данных небольшие
сложно придумать мобильное приложение с такими объёмами данных, чтобы SQLite тормозил
Vadim
я хз, может ты какую либу взял в зависимости и её тестируешь) Тогда в этой либе поищи такой спан
не брал я либы в том то и дело) написал обычный метод который парсит html @Suppress("DEPRECATION") fun String.parseHTML(): Spanned { val result = parseHTMLToSpanned() return if (result.getSpans(0, result.length - 1, Any::class.java).isEmpty()) SpannedString(this) else result }
Denis
начиная с api 26
Vadim
parseHTMLToSpanned а это что?
private fun String.parseHTMLToSpanned(): Spanned { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) Html.fromHtml(this, HtmlCompat.FROM_HTML_MODE_LEGACY) else Html.fromHtml(this) }
Denis
нет
прикольно, я думал, что это тоже отслеживается
Turalllb
кажется приложение должно падатьв таком случае
нет, с чего бы падать, я же не ui из доп потока трогаю. У меня по всему приложению в sqLite главный поток пишет и читает и даже по 50 запросов в одном месте делает, чтобы дерево тем и вопросов отобразить. Без задержек пашет
Alexey
сложно придумать мобильное приложение с такими объёмами данных, чтобы SQLite тормозил
Вот тут у меня вопрос. Допустим я в приложении отображаю коментарии. Их может быть по 1к на пост И например я хочу их кэшировать. Посмотрю 10 постов и уже имею 10к коментариев в базе
Сергей
Эскюлайт делает простые вещи вроде обновления одной записи за 5-7 мс. Логировал. Там запись кешируется
Alexey
тут вот должно уже тормозить
Mike
тут вот должно уже тормозить
1. Нет, ты не хочешь кешировать 10к комментариев. Пользователь прочитает 100 и обломается. 2. Нет, не должно, потому что выбирать сразу все данные — это бред.
Alexey
если не чтение из бд, так мапинг может тормозить
Turalllb
ну просто столько комментариев кешировать нафиг не нужно
Turalllb
то что прочитал уже пусть кешируется
Mike
если не чтение из бд, так мапинг может тормозить
Это что такое? Создать объект и заполнить его указателями? Лол
neikist
нет, я в главном в sqLite пишу. все норм работает. ) наверно потому что объемы данных небольшие
Хм, теперь понятно из за кого у меня приложения тормозят (данные которых не в памяти телефона а на тормозной карточке)
Mike
neikist
Карточка такая тормозная, что 100-200 КиБ можно забрать за ~1 мс
Ну так то приложения данные которых у меня на карте лежат при каждом втором запуске ANRами ругаются. А также при работе любят секунды по 2-3 подвисать на элементарных действиях вроде скролла.
Alexey
У тебя на экране помещается сразу 10к записей?
это уже вопрос реализации. Ну вот захотел я все сразу грузить, потому что нужен будет поиск по тексту. А через базу я не буду это делать, потому-что я джуниор например
Turalllb
Хм, теперь понятно из за кого у меня приложения тормозят (данные которых не в памяти телефона а на тормозной карточке)
нет, бд лежит в пакете приложения в памяти телефона. Да и скорости карты достаточно. У меня небольшая задержка с открытием экрана появилась только когда я открывал активность с двумя табами в обоих recyclerView с 50 запросами в бд. Плюс обходы полученного дерева ) вот тогда чуть-чуть тормозит и то на слабом телефоне. А можно легко и в доп. потоке запросы делать.
Alexey
согласен, можно сделать чтение в главном потоке без тормозов, но нужно будет тюнить иногда
neikist
Так что лучше все же выносить все такое из главного потока.
Vadim
https://developer.android.com/reference/android/text/style/ClickableSpan?hl=en ищи нужный класс в *Span
глянул тут, потом в тестах просто вбил класс Any и он мне указал что мол это класс URLSpan написал что то следующее: assertThat(spannedMessage.getSpans(0, 20, URLSpan::class.java), equalTo(URLSpan("https://www.some.com/"))) и он по прежнему ругается на несоответствие типов
Vadim
( Array<(out) URLSpan!>!, Matcher<in Array<(out) URLSpan!>!>! ) ( URLSpan!, Matcher<in URLSpan!>! )
Vadim
посмотри, что ли, на возвратный тип метода getSpans
public <T> T[] getSpans(int start, int end, Class<T> type);
Mike
непонятно, зачем с таким знанием языка и SDK что-то тестировать, и, тем более, тестировать SDK
Mike
public <T> T[] getSpans(int start, int end, Class<T> type);
я уже посмотрел, теперь ты)
Alexey
мб equalTo(URLSpan("https://www.some.com"))) т.е. без последнего слэша
Mike
он тебе про тайпчекер, а ты про слеши
Vadim
непонятно, зачем с таким знанием языка и SDK что-то тестировать, и, тем более, тестировать SDK
я не тестирую SDK просто пример ты когда берешь тестируешь коллекцию и используешь в тестах find first который является методом SDK ты же проверяешь не этот метод, а то что он вернёт, первый жлемент коллекции так и тут ...
gio
подскажите как сделать deep link url тач чтобы если приложение не установлено открывался плей маркет?
Vyacheslav
дипы какой системы тебе нужны
Vyacheslav
firebase, facebook, branch...
gio
./adb shell am start -a android.intent.action.VIEW -d "http://**"
Алексей
Какой тестовый фреймворк вы используете для написания юнит-тестов на Kotlin?
Vyacheslav
./adb shell am start -a android.intent.action.VIEW -d "http://**"
к чему это ? не понимаю тебя, дай больше информации. Есть много способов сделать дипу, по сути просто регаешь свой хост в манифесте, и если его нету, тебя автоматом кинет в стор с твоим applicationid
gio
firebase, facebook, branch...
сканирует кр код, просто нажимает на гиперссылку и открывается по url