DarkPerl
если я сделаю merge то это будет последовательно по 1 элементу закрузка либо ожидание всего листа сразу
Вам нужно в неблокирующем режиме работать с сетью. Собирать данные в какой нибудь контейнер. И читать из него помере поступления в него данных. Если нужно не по 1 запросу за раз в том смысле чтобы каждый запрос не был блокирующим пока вы не получите ответ.
DarkPerl
Вы этого хотите избежать ?
Kozimjon
Ребят, не очень понятная ситуация. Есть: 1. Класс (Connection) для web-socket подключения 2. SyncAdapter для синх. контактов В кач-ве DI используется Hilt ——— 1. При запуске Hilt создает инстанс класса Connection 2. Активити получает экземпляр Connection - и там он сначала подключается к серверу 3. после успешного подключения внутри класса Connection запускается синх контактов - вызывается ContentResolver.requestSync(mAcc, SYNC_AUTHORITY, bundle) 4. Там внутри все крутится - в конечном итоге создается SyncAdapter - который проверяет контакты и должен передать контакты в экземпляр Connection - вот тут проблема - я не знаю как из адаптера достучаться до уже созданного экземпляра Connection Спасибо если дочитали до конца, спасибо если поняли меня и буду благодарен любому совету
Anton
Попробуйте Retrofit с RxJava
я так и делаю сейчас
DarkPerl
я так и делаю сейчас
Ну, значит, вы делаете все верно
Anton
Anton
Здесь repeat делает загрузку последовательно, а нужно если это возможно сделать параллельно
DarkPerl
rxJava с ретрофит не так используется
DarkPerl
rxJava адаптер передается Retrofit у
DarkPerl
Вы с помощью ретрофита делаете запросы
DarkPerl
А в ответ вам возвращаются уже объекты с которыми вы работаете
Anton
Просто сделать в обычном цикле? ._.
тогда фриз сразу после нажатия
Сергей
Там обсервится в мэйне....это норм для всех запросов?
DarkPerl
тогда фриз сразу после нажатия
У вас какие интерфейсы сейчас в методах retrofit ?
Вова
кто знает если классы обьеденить в папки придется переписывать пути перехода к другой активности?
Вова
у меня просто классов много,решил спросить,вдруг кто сталкивался
Dany
Пытаюсь сделать префы через gson, однако получаю ошибку Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ на 251 строке. resView - объект адаптера, в котором хранится сортед лист contacts, в который я добавляю объекты Contact. Что я делаю не так здесь и как это решить?
Kozimjon
Пытаюсь сделать префы через gson, однако получаю ошибку Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ на 251 строке. resView - объект адаптера, в котором хранится сортед лист contacts, в который я добавляю объекты Contact. Что я делаю не так здесь и как это решить?
выведите в лог json и посмотрите что там - это ошибка означает, что для листа gson ищет [ как начало строки (так как вы в типе указали List), но ваш json скорее всего начинается с { (то есть как объект, а не как массив)
Anonymous
Всем привет. Кто объяснит? Как получить нормальный путь с uri?) Советы со stack overflow не помогают. Сейчас такой формат data.getData().getPath()
Данил
Пытаюсь получить геолокацию, в гугле всё точь в точь, у меня нихуя не приходит. В чём проблема?
Данил
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
Sergey
а если зайти в настройки найти свое приложение и посотреть какие разрешения ему даны?
Sergey
возможно при запуске их либо не запросили либо не дали
Данил
Данил
хорошо
Сергей
ну и иногда самый первый запрос координат выдает null, это норма
Anonymous
Пытаюсь получить геолокацию, в гугле всё точь в точь, у меня нихуя не приходит. В чём проблема?
в здании вообще не всегда ловят спутники. лучше сделай опрос в сервисе, или запрашивай последние известные координаты у локейшен менеджера они должны быть.
Anonymous
Uri или полный путь к файлу?
cудя по эскейпам в пути это ури.
Anonymous
Uri или полный путь к файлу?
Полный, нормальный путь к файлу (/sdcard/files/file.txt)
Ярослав🇺🇦
Полный, нормальный путь к файлу (/sdcard/files/file.txt)
А вот это уже другая интересная история.😁 я выкручивался так https://stackoverflow.com/a/60642994
Anonymous
Проще избавиться от функции, или прописывать самостоятельно путь
Ярослав🇺🇦
Я пока не вдупляю в одну суть. Надо использовать saf для выбора файлов/указания папки, но вот как потом из полученной кашей работать хз:) io.File не работает с тем uri, как обстоят дела с nio.Files и uri тоже не знаю, не работал толком
Ярослав🇺🇦
То, что выше по ссылке это лютый костыль
Anonymous
А возможно ли как-то сделать общий Toolbar для всех фрагментов? У меня сделано так, что, в Мейн активити по стандарту setContentView, а в остальных inflate fragment🤔
Anonymous
То, что выше по ссылке это лютый костыль
Ну это.. где-то вес апк будет превышать вдвое, если не втрое
Ярослав🇺🇦
Ну это.. где-то вес апк будет превышать вдвое, если не втрое
Эмм, в каком смысле в двое? Там вообще один класс без каких-либо дополнительных библиотек
Anonymous
Дак по дефолту студия создает проект с bottom navigation где есть такое
(суть понял) нужно смотреть, ибо я занимаюсь мододелованием исходного кода😂👍 Привожу приложение в нормальный вид, и делаю лишь хотфиксы
Ярослав🇺🇦
тогда фриз сразу после нажатия
Про многопоточность не слыхали?
Ярослав🇺🇦
У тебя по коду всё в одном потоке
Никита 🙃
А кто знает. Почему у DiffUtils, если в areContentsTheSame вернуть false, то не отрабатывает onBindViewHolder() у адаптера в последствии? Если размер списка поменялся - всё ок. А вот если поменять сам айтем и засунуть его опять в адаптер - он не хочет нотифаить адаптер?
Никита 🙃
значит адаптер не видит разницы между элементами пропишите свое сравнение
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { return oldList[oldItemPosition].isInFavourite == newList[newItemPosition].isInFavourite } Так вроде прописал...
Sergey
и это полем еняется?
Никита 🙃
Да
Никита 🙃
Айтем ставится. При проскролле - когда айтем уходит из видимых и возвращается - он уже подхватывает новые данные. Хз что за поведение у DiffUtils странное
Никита 🙃
Да. override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { return oldList[oldItemPosition] == newList[newItemPosition] }
Никита 🙃
Причем чисто технически там тоже зафейлится сраавнение должно
Sergey
смотря как класс написан
Никита 🙃
data class без переопределения equals и hasCode + всё в конструкторе
Никита 🙃
Так-что должен)
Sergey
тогда да должен - можно для себя проверить что выдает адаптер при изменении
Sergey
registerAdapterDataObserver(object : androidx.recyclerview.widget.RecyclerView.AdapterDataObserver() { override fun onItemRangeChanged(positionStart: Int, itemCount: Int) { override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) { }) }
Sergey
и проследить что там внутри делается при изменении отрабатывает или нет
Никита 🙃
хмм... Причём если прописать явно false там, то всё ок.Что-то не так с условием у меня. надо копать
Никита 🙃
А, не. Я имел ввиду при апдейте. Когда rangeChanged - отрабатывает ок
Mike
Да
var или copy?
Никита 🙃
Mike
var
А, ну конец немного предсказуем
Никита 🙃
А, ну конец немного предсказуем
Да, с copy() всё стало хорошо. Но почему так? Ведь пусть и класс один и тот-же, у него другой hashCode() становится
Sergey
А, ну конец немного предсказуем
всмысле что сам объект не изменился?
Mike
Да, с copy() всё стало хорошо. Но почему так? Ведь пусть и класс один и тот-же, у него другой hashCode() становится
Ну у тебя в старом и в новом списке лежит один и тот же объект. А хэш-код не при чём, его никто специально не запоминает.
Никита 🙃
Ну у тебя в старом и в новом списке лежит один и тот же объект. А хэш-код не при чём, его никто специально не запоминает.
Даже перепоределив equals && hashCode всёравно не работало. Хм. Ну или я что-то не так сделал