
Like
29.10.2017
14:54:16
Приветы. Как базу данных закрываете если запись в неё идёт с нескольких потоков одновременно?

Kirill
29.10.2017
14:59:44
Как в студии зовутся эти штуки, поясняющие параметр?
Постоянно забываю

Google

Kirill
29.10.2017
15:05:09
Editor > General > Appearance

Artyom
29.10.2017
15:21:32
Сам спросил, сам ответил.
:)

Михаил
29.10.2017
15:23:09
а мне приснилось или :layout_marginHorizontal должно быть в библе поддержки?

Sergey
29.10.2017
15:24:08

Михаил
29.10.2017
15:24:42
нету. но вроде в ченджлогах читал что добавили

Aleksandr
29.10.2017
16:41:17
Есть тут те кто в realm шарит?

Лёша
29.10.2017
16:45:35

Aleksandr
29.10.2017
16:51:51
Вопрос такой, есть viewpager на нем два фрагмента один для просмотра эл из сети второй для отображения сохранённых , каждый из них отображает список, в первом фрагменте грузиться одна модель данных, по нажатию на Эл модель передаётся в экран деталей и там его можно сохранить, соответственно ещё и перемаппить в другую модель, на втором фрагменте при возврате сразу же должно отобразиться изменение (появиться новый объект), а теперь вопрос, как на реалме постоянно слушать изменения желательно с рх и при этом ещё и маппить объекты обратно. То что я пытался попробовать это realmresult но мне бросает какой-то непонятный ексепшн типо нельзя менять объекты созданные в другом потоке


Лёша
29.10.2017
16:58:20
Вопрос такой, есть viewpager на нем два фрагмента один для просмотра эл из сети второй для отображения сохранённых , каждый из них отображает список, в первом фрагменте грузиться одна модель данных, по нажатию на Эл модель передаётся в экран деталей и там его можно сохранить, соответственно ещё и перемаппить в другую модель, на втором фрагменте при возврате сразу же должно отобразиться изменение (появиться новый объект), а теперь вопрос, как на реалме постоянно слушать изменения желательно с рх и при этом ещё и маппить объекты обратно. То что я пытался попробовать это realmresult но мне бросает какой-то непонятный ексепшн типо нельзя менять объекты созданные в другом потоке
Так это одно из основных правил realm'a, что объект может изменяться лишь на том потоке на котором создан/получен
Если хочешь "прокинуть" объект на другой поток, то надо будет получить его копию (realmInstance.copyFromRealm()), а после изменения на другом потоке произвести realm.insertOrUpdate()
Хз на сколько верный, но рабочий вариант
Это на счёт выкидываемого эксепшена
При нажатии на кнопку сохранения, я так понимаю, создаётся объект того класса, которые отображаются на втором фрагменте? Тогда достаточно подписаться на втором фрагменте на изменение таблицы соответствующего класса и просто заменять список новой порцией данных
Ну или сделать более тонко, подписавшись на changeSet

Google

Aleksandr
29.10.2017
17:02:09
Так я все манипуляции с объектом делаю в одном потоке, потом делаю subscribeon, observeOn и результат прокидываю на фьюху, или это и считается модификацией?
А можно подробнее о том как подписаться на изменения таблицы? Просто название метода, дальше я сам

Лёша
29.10.2017
17:03:50
На сколько я понимаю, считается перекидыванием на другой поток
Там не только модифицировать, но и прочитать вроде как их нельзя было
Обычно делал так
realmInstance.where(YourClass::class.java).findAll().asFlowable()
asFlowable() заделали совсем недавно
В немного более старых версиях у них была поддержка лишь rx1 версии и там использовался .asObservable()

Aleksandr
29.10.2017
17:06:32
Модели одинаковые по сути просто из-за того что мне нужен parcelable пришлось разделить и делать мап когда сохраняю
А когда получаю обратно мапить

Gregory
29.10.2017
17:07:27
(как у некоторых всё сложно, оказывается)

Лёша
29.10.2017
17:07:59

Aleksandr
29.10.2017
17:08:39
При сохранении в объекты реалма, а при отображении обратно

Roman
29.10.2017
17:09:31

Aleksandr
29.10.2017
17:10:11

Лёша
29.10.2017
17:10:11
Если получаешь в фоновом потоке и хочешь отдать на ui-поток, достаточно вызвать copyFromRealm перед передачей

Gregory
29.10.2017
17:10:46

Павел
29.10.2017
17:11:18
ну это по большему счету единственный минус реалма, это передача объектов между потоками

Gregory
29.10.2017
17:12:19
наверное, тут делал бы как-то так же, т.е. у меня "объекты реалма" бы за пределы метода, где я их получил, не выходили бы вообще

Aleksandr
29.10.2017
17:12:22
Всё из-за parcelable

Gregory
29.10.2017
17:12:40
так а чем эти объекты такие особенные?
я как-то привык к тому, что в объектах данных обычно есть только данные и никакой логики и никаких ссылок на логику

Google

Aleksandr
29.10.2017
17:13:42
Нельзя унаследовать реалм и имплементировать parcelable на одной модельке

Лёша
29.10.2017
17:13:45
Я бы сделал так
Получил бы данные из базы, смапил их в пригодное для вьюшек представление и отдал бы дальше

Gregory
29.10.2017
17:13:57

Aleksandr
29.10.2017
17:14:12
Так проблема как раз в мапе
Он не разрешает
Но я попробую то что вы предложили

Gregory
29.10.2017
17:14:46
в смысле "не разрешает"?)
кстати, иногда имеет смысл не считать библиотеки иммутабельными
да, ты можешь просто взять и допилить любую библиотеку под свои нужды

Otan
29.10.2017
17:15:44
Коллеги, которая из проблем первоначальная?

Лёша
29.10.2017
17:15:47
Перед тем, как мапить получи копию объектов через copyFromRealm

Aleksandr
29.10.2017
17:16:08
Примеры кода тут можно приводить? Может понятнее станет?

Gregory
29.10.2017
17:16:10

Otan
29.10.2017
17:16:21

Лёша
29.10.2017
17:16:59

Gregory
29.10.2017
17:17:16

Otan
29.10.2017
17:29:31
А какой номер ошибки юзать?
По сути это может быть просто нехваткой оперативной памяти на телефоне
Шапка ошибки такая -
java.lang.NullPointerException. Его наверное и надо юзать.

Google

Лёша
29.10.2017
17:45:26

Alexey
29.10.2017
17:49:43

Илья
29.10.2017
17:50:48

Alexey
29.10.2017
17:51:06

Admin
ERROR: S client not available

Otan
29.10.2017
17:54:10

Лёша
29.10.2017
17:54:28
Что ты имеешь в виду под номером?

Илья
29.10.2017
17:54:59

Otan
29.10.2017
17:55:09
Раньше краш-репорты не юзал.
Проблема возникла только у двух юзеров.

Лёша
29.10.2017
17:56:36
Подумать-погадать какой объект внутри onCreate может быть возможно не создан к моменту обращения к нему

Otan
29.10.2017
17:57:59

Илья
29.10.2017
17:58:49
А, блин, спутал вас))
Неочевидное, до которого только один юзер дошел

Otan
29.10.2017
18:00:20
там нету ветвления. Там линейно все идет у всех.

Лёша
29.10.2017
18:01:19

Otan
29.10.2017
18:01:51

Google

Лёша
29.10.2017
18:02:52
А есть возможность самому запустить приложение на 6/7 андроиде? Ну или в эмуляторе хотя бы

Otan
29.10.2017
18:04:16
public class FirsttenwordActivity extends AppCompatActivity {
ListView firstTenWordListView;
Cursor firstTenWordCursor;
SQLiteDatabase db;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_firsttenword);
firstTenWordListView=(ListView) findViewById(R.id.firstTenWordListView);
db=((MyApplication) this.getApplication()).getMyAppDb();
firstTenWordCursor = db.rawQuery("select _id from table where _id<=10", null);
ClientCursorAdapter adapter = new ClientCursorAdapter(this, R.layout.listview, firstTenWordCursor, 0 );
firstTenWordListView.setAdapter(adapter);
}
Вот код
Где может быть ошибка?

Kirill
29.10.2017
18:06:32

Otan
29.10.2017
18:07:44

Лёша
29.10.2017
18:08:53

Kirill
29.10.2017
18:09:15

Otan
29.10.2017
18:09:35

Kirill
29.10.2017
18:10:06

Otan
29.10.2017
18:10:41
вот рапорт

Kirill
29.10.2017
18:15:17
Курсор всегда нужно проверять на нулл. Даже если уверен что он не нулл.