У меня есть функция, где я инициализирую все данные из firebase, также я делаю их доступными для реальной БД, но когда данные обновляются, я хочу удалить все данные из области и сохранить новые, когда я пытаюсьсделать это происходит сбой, потому что onDataChange пытается выполнить действие с удаленным объектом
public void initSettings(){
TextView tv = findViewById(R.id.updateInfo);
tv.setText(updateValue);
Button bu = findViewById(R.id.updateB);
bu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clearRealm();
initRealmData();
}
});
}
public void initRealmData(){
RealmResults<ChapterInfo> realmChapter = realm.where(ChapterInfo.class).findAll();
RealmResults<ArticleInfo> realmArticle = realm.where(ArticleInfo.class).findAll();
RealmResults<SectionInfo> realmSection = realm.where(SectionInfo.class).findAll();
if(realmChapter.size() > 0){
ciA.addAll(realmChapter);
siA.addAll(realmSection);
aiA.addAll(realmArticle);
Collections.sort(siA);
Collections.sort(aiA);
Collections.sort(ciA);
System.out.print("ADDING DATA FROM REALM");
}else{
System.out.println("DEN EXEI DATA TO REALM");
initData();
}
}
public void clearRealm(){
for(int i =0 ; i <ciA.size();i++) ciA.remove(i);
for(int i =0 ; i <siA.size();i++) siA.remove(i);
for(int i =0 ; i <aiA.size();i++) aiA.remove(i);
realm.beginTransaction();
RealmResults<ChapterInfo> ci = realm.where(ChapterInfo.class).findAll();
if(ci.size() >0)
ci.deleteAllFromRealm();
RealmResults<ArticleInfo> ai = realm.where(ArticleInfo.class).findAll();
if(ai.size()>0)
ai.deleteAllFromRealm();
RealmResults<SectionInfo> si = realm.where(SectionInfo.class).findAll();
if(si.size() > 0)
si.deleteAllFromRealm();
realm.commitTransaction();
}
public void initData(){
setContentView(R.layout.activity_main);
pb = findViewById(R.id.progressBar);
pb.setVisibility(View.VISIBLE);
DatabaseReference myRef2 = FirebaseDatabase.getInstance().getReference();
myRef2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for(DataSnapshot ds : snapshot.child("sections").getChildren()){
String key = ds.getKey();
SectionInfo siTmp = new SectionInfo();
siTmp.setTitle(snapshot.child("sections").child(key).getValue(SectionInfo.class).getTitle());
siTmp.setOrder(snapshot.child("sections").child(key).getValue(SectionInfo.class).getOrder());
siTmp.setKey(key);
//siA.add(siTmp);
realm.beginTransaction();
final SectionInfo siR = realm.createObject(SectionInfo.class);
siR.setKey(siTmp.getKey());
siR.setTitle(siTmp.getTitle());
siR.setOrder(siTmp.getOrder());
realm.commitTransaction();
}
for(DataSnapshot ds : snapshot.child("chapters").getChildren()){
String key = ds.getKey();
ChapterInfo ciTmp = new ChapterInfo();
ciTmp.setTitle(snapshot.child("chapters").child(key).getValue(ChapterInfo.class).getTitle());
ciTmp.setOrder(snapshot.child("chapters").child(key).getValue(ChapterInfo.class).getOrder());
ciTmp.setSection(snapshot.child("chapters").child(key).getValue(ChapterInfo.class).getSection());
ciTmp.setKey(key);
//ciA.add(ciTmp);
realm.beginTransaction();
final ChapterInfo ciR = realm.createObject(ChapterInfo.class);
ciR.setKey(key);
ciR.setTitle(ciTmp.getTitle());
ciR.setOrder(ciTmp.getOrder());
ciR.setSection(ciTmp.getSection());
realm.commitTransaction();
}
for(DataSnapshot ds : snapshot.child("articles").getChildren()){
String key = ds.getKey();
ArticleInfo aiTmp = new ArticleInfo();
aiTmp.setTitle(snapshot.child("articles").child(key).getValue(ArticleInfo.class).getTitle());
aiTmp.setOrder(snapshot.child("articles").child(key).getValue(ArticleInfo.class).getOrder());
aiTmp.setChapter(snapshot.child("articles").child(key).getValue(ArticleInfo.class).getChapter());
aiTmp.setKey(key);
//aiA.add(aiTmp);
realm.beginTransaction();
final ArticleInfo aiR = realm.createObject(ArticleInfo.class);
aiR.setTitle(aiTmp.getTitle());
aiR.setOrder(aiTmp.getOrder());
aiR.setChapter(aiTmp.getChapter());
aiR.setKey(key);
realm.commitTransaction();
}
pb.setVisibility(View.GONE);
codeCreated();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}