Использование FireBase и удаление объектов области - PullRequest
0 голосов

У меня есть функция, где я инициализирую все данные из 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) {

        }
    });

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...