首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在王国对象中添加对象之后,它不会更新。

在王国对象中添加对象之后,它不会更新。
EN

Stack Overflow用户
提问于 2015-09-09 08:14:29
回答 1查看 885关注 0票数 1

有人能给我解释一下吗?这是我的代码,然后,我将显示日志。事实上,我有一个对象列表。我记录它的大小: 1.我清除它,变成0。我在它中添加对象,它仍然是0。

这是我的密码:

代码语言:javascript
复制
 Log.i("", "update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE" + index);
                    RealmList<TripStep> tripsteps = psTrip.getTripSteps();
                    Log.i("", "update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE2:" + psTrip.getTripSteps().size());
                    realmActive.beginTransaction();
                    TripStep tripStep = realmActive.copyToRealmOrUpdate(updateStepResponse.getStep());
                    realmActive.commitTransaction();
                    Log.i("", "update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE3 + index is:" + index);
                    realmActive.beginTransaction();
                    tripsteps.set(index, tripStep);
                    realmActive.commitTransaction();
                    Log.i("", "update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE4");
                    if (isRoaming) {
                        if ((tripsteps.size() - 2 == index) && !Utils.hasStarted(PSNewJourneyActivity.this)) {
                            realmActive.beginTransaction();
                            tripsteps.get(tripsteps.size() - 1).setTravelMode(updateStepResponse.getStep().getTravelMode());
                            realmActive.commitTransaction();
                        }
                    }
                    Log.i("", "update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE5 tripsteps not in pstrip:" + tripSteps.size());
                    Log.i("", "update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE5 tripsteps not in pstrip before:" + psTrip.getTripSteps().size());
                    realmActive.beginTransaction();
                    psTrip.getTripSteps().clear();
                    realmActive.commitTransaction();
                    Log.i("", "update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE5 tripsteps not in pstrip AFTER CLEAR:" + psTrip.getTripSteps().size());
                    realmActive.beginTransaction();
                    for (TripStep tripStep1 : tripsteps){
                        psTrip.getTripSteps().add(tripStep1);
                    }
                    realmActive.commitTransaction();
                    realmActive.beginTransaction();
                    realmActive.copyToRealmOrUpdate(psTrip);
                    realmActive.commitTransaction();
                    Log.i("", "update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE6 tripstep size:" + psTrip.getTripSteps().size());
                    Handler han = new Handler();
                    han.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            continueInit(true, true);
                            ProgressForMap(true);
                        }
                    }, mapDelay);

这是我的日志:

代码语言:javascript
复制
update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE0
09-09 10:12:11.219  32740-32740/nl.hgrams.passenger I/﹕ update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE2:1
09-09 10:12:11.251  32740-32740/nl.hgrams.passenger I/﹕ update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE3 + index is:0
09-09 10:12:11.257  32740-32740/nl.hgrams.passenger I/﹕ update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE4
09-09 10:12:11.257  32740-32740/nl.hgrams.passenger I/﹕ update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE5 tripsteps not in pstrip:1
09-09 10:12:11.257  32740-32740/nl.hgrams.passenger I/﹕ update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE5 tripsteps not in pstrip before:1
09-09 10:12:11.264  32740-32740/nl.hgrams.passenger I/﹕ update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE5 tripsteps not in pstrip AFTER CLEAR:0
09-09 10:12:11.277  32740-32740/nl.hgrams.passenger I/﹕ update step pitstop 1 BEFORE TEST FOR ACTIVE -> ACTIVE6 tripstep size:0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-09 08:41:46

这有点令人困惑。我要说的一件事是:

代码语言:javascript
复制
                    // this part makes sense
                    realmActive.beginTransaction(); 
                    for (TripStep tripStep1 : tripsteps){
                        psTrip.getTripSteps().add(tripStep1);
                    }
                    realmActive.commitTransaction();

                    // why are you then doing this?
                    //realmActive.beginTransaction();
                    //realmActive.copyToRealmOrUpdate(psTrip);
                    //realmActive.commitTransaction();

据我所知,第一部分应该足够了,第二部分是什么也不做。

更新:

刚刚注意到您的变量tripsteps是在这里分配的:

代码语言:javascript
复制
RealmList<TripStep> tripsteps = psTrip.getTripSteps();

然后你再做这个:

代码语言:javascript
复制
psTrip.getTripSteps().clear();

tripstepspsTrip.getTripSteps()指向同一个对象,所以当您调用psTrip.getTripSteps().clear();时,您也在清除tripsteps

所以在这一点上,在tripsteps中没有任何东西

代码语言:javascript
复制
for (TripStep tripStep1 : tripsteps){ // tripsteps.size() == 0
    psTrip.getTripSteps().add(tripStep1);
}

我认为你需要“深复制”你的名单:

这是错误的:

代码语言:javascript
复制
RealmList<TripStep> tripsteps = psTrip.getTripSteps();

取而代之的是这样做:

代码语言:javascript
复制
RealmList<TripStep> tripsteps = cloneList(psTrip.getTripSteps());

public List<TripStep> cloneList(RealmList<TripStep> list) {
    List<TripStep> clone = new ArrayList<TripStep>(list.size());
    for(TripStep item : list){
        clone.add(new TripStep(item));
    }

    return clone;
}

您需要在TripStep类中创建一个可以从另一个实例复制的构造函数:

代码语言:javascript
复制
class TripStep
{
    public TripStep()
    { ... } // Regular constructor

    public TripStep(TripStep cloneFrom) {
        // Copy all the fields of TripStep.
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32474355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档