Я получаю JSON
данные, которые я создал и загрузил в Интернет, используя Retrofit
.Я могу успешно извлекать и отображать данные, но когда я вставляю данные в базу данных Room
, добавляется только самый последний объект JSON
, столько раз, сколько кажется JSON
объектов.
По моим log
данным JSON
извлекается целиком по методу Retrofits
onResponse()
- проблем нет.Но согласно методу observer
в getAllData()
из Room
к Room
добавляется только самый последний объект JSON
.Наблюдатель срабатывает один раз для каждого JSON
объекта, но каждый раз отображается только последний JSON
объект.Я дважды проверил файл базы данных, используя Ridill SQLlte
, и он подтверждает это:
Мой Log
выглядит так:
//First observer shows nothing
D/TAG: OBSERVED
//JSON is retrieved, looks fine
D/TAG: JSON GATHERED
D/TAG: ROOM NAME: Bob
D/TAG: ROOM DATE: 3/13/2015
D/TAG: ROOM FROM: 8:00
D/TAG: ROOM UNTIL: 13:00
D/TAG: ROOM NAME: Joe
D/TAG: ROOM DATE: 1/3/2015
D/TAG: ROOM FROM: 12.30
D/TAG: ROOM UNTIL: 13:00
D/TAG: ROOM NAME: Martin
D/TAG: ROOM DATE: 1/5/2015
D/TAG: ROOM FROM: 15.30
D/TAG: ROOM UNTIL: 16:00
//Observer is set again, shows last of the JSON objects
D/TAG: OBSERVED
D/TAG ROOM: MyRoomEntity{id=1, name='Martin', date='1/5/2015', from='15.30', until='16:00'}
//Observer fires again, now having added the last JSON object a second time
D/TAG: OBSERVED
D/TAG ROOM: MyRoomEntity{id=1, name='Martin', date='1/5/2015', from='15.30', until='16:00'}
D/TAG ROOM: MyRoomEntity{id=2, name='Martin', date='1/5/2015', from='15.30', until='16:00'}
//Observer fires again, now adding the last object for a third time.
D/TAG: OBSERVED
D/TAG ROOM: MyRoomEntity{id=1, name='Martin', date='1/5/2015', from='15.30', until='16:00'}
D/TAG ROOM: MyRoomEntity{id=2, name='Martin', date='1/5/2015', from='15.30', until='16:00'}
D/TAG ROOM: MyRoomEntity{id=3, name='Martin', date='1/5/2015', from='15.30', until='16:00'}
Метод onResponse()
выглядит следующим образом:
public void onResponse(Call<List<RetrofitVariables>> call, Response<List<RetrofitVariables>> response) {
List<RetrofitVariables> myResponse = response.body();
MyRoomEntity myRoomEntity = new MyRoomEntity();
Log.d( "TAG" , "JSON GATHERED" );
if(myResponse != null) {
MyRoomDatabase db = myViewModel.getRoomDatabase();
for(RetrofitVariables item: myResponse) {
Log.d( "TAG" , "name: " + item.getName());
Log.d( "TAG" , "from: " + item.getFrom());
Log.d( "TAG" , "until: " + item.getUntil());
Log.d( "TAG" , "Counter: " + counter);
myRoomEntity.setName( item.getName() );
myRoomEntity.setDate( item.getDate() );
myRoomEntity.setFrom( item.getFrom() );
myRoomEntity.setUntil( item.getUntil() );
//THESE LOGS SHOW CORRECT RESULT
Log.d( "TAG" , "ROOM NAME: " + myRoomEntity.getName());
Log.d( "TAG" , "ROOM DATE: " + myRoomEntity.getDate());
Log.d( "TAG" , "ROOM FROM: " + myRoomEntity.getFrom());
Log.d( "TAG" , "ROOM UNTIL: " + myRoomEntity.getUntil());
myViewModel.insertDataVM( myRoomEntity );
}
}
}
И мой observer
выглядит так:
myViewModel.getAllDataVM().observe( this, new Observer<List<MyRoomEntity>>() {
@Override
public void onChanged(@Nullable List<MyRoomEntity> myRoomEntities) {
//myAdapter.setList( myRoomEntities );
Log.d("TAG", "OBSERVED");
if(myRoomEntities != null) {
for(MyRoomEntity item: myRoomEntities) {
Log.d("TAG ROOM ", "" + item.toString());
}
}
}
} );
Все выглядитхорошо в методе onResponse()
, так почему же данные не добавляются должным образом в Room
?Как мне получить все JSON
объекты в Room
, а не только последний?Что мне здесь не хватает?
Заранее спасибо за любую помощь!