HarmonyOS 鸿蒙Next中怎么在实现Sequenceable接口中存储另一个实现Sequenceable接口的属性?

HarmonyOS 鸿蒙Next中怎么在实现Sequenceable接口中存储另一个实现Sequenceable接口的属性? 参照Android的Parcelable的写法:

public class SequenceableMain implements Sequenceable {

    private SequenceableTest test;

    @Override
    public boolean marshalling(Parcel parcel) {
        parcel.writeSequenceable(test);
        return true;
    }

    @Override
    public boolean unmarshalling(Parcel parcel) {
        test = parcel.createSequenceable((SequenceableTest.class.getClassLoader()));
        return true;
    }

    public SequenceableMain(Parcel parcel) {
        unmarshalling(parcel);
    }

    public static final Producer<SequenceableMain> PRODUCER = new Producer<SequenceableMain>() {
        @Override
        public SequenceableMain createFromParcel(Parcel parcel) {
            return new SequenceableMain(parcel);
        }
    };
}

运行时出现了 Caused by: ohos.utils.ParcelException: Fail to load class by all possible ClassLoaders.

基本类型都可以通过parcel.writeXxx 和 parcel.readXxx实现,可是就这种已经实现序列化的属性怎么写?


更多关于HarmonyOS 鸿蒙Next中怎么在实现Sequenceable接口中存储另一个实现Sequenceable接口的属性?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复
楼主你好,可以参考以下代码实现:

```java
public class SequenceableMain implements Sequenceable {
  
    private SequenceableTest test;
    
    public SequenceableTest getTest() {
        return test;
    }
    
    public void setTest(SequenceableTest test) {
        this.test = test;
    }
    
    @Override
    public boolean marshalling(Parcel parcel) {
        parcel.writeTypedSequenceable(test);
        return true;
    }
    
    @Override
    public boolean unmarshalling(Parcel parcel) {
        test = parcel.createSequenceable(SequenceableTest.class.getClassLoader());
        return true;
    }
    
    public static final Producer<SequenceableMain> PRODUCER = new Producer<SequenceableMain>() {
        
        @Override
        public SequenceableMain createFromParcel(Parcel parcel) {
            SequenceableMain instance = new SequenceableMain();
            instance.unmarshalling(parcel);
            return instance;
        }
    };
}

更多关于HarmonyOS 鸿蒙Next中怎么在实现Sequenceable接口中存储另一个实现Sequenceable接口的属性?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


解决了吗楼主,我遇到了这样的问题

亲爱滴开发者 ,这个问题已经在处理中啦,稍后答复你哟 ,么么哒

在HarmonyOS鸿蒙Next中,如果你想在实现Sequenceable接口的类中存储另一个实现Sequenceable接口的属性,可以通过writeSequenceablereadSequenceable方法来实现序列化和反序列化。

首先,确保你定义的类实现了Sequenceable接口。然后,在marshalling方法中,使用writeSequenceable方法将另一个Sequenceable对象写入序列化流;在unmarshalling方法中,使用readSequenceable方法从序列化流中读取该对象。

例如:

class MyClass implements Sequenceable {
    private anotherSequenceable: AnotherSequenceableClass;

    marshalling(sequenceable: Sequenceable): boolean {
        sequenceable.writeSequenceable(this.anotherSequenceable);
        return true;
    }

    unmarshalling(sequenceable: Sequenceable): boolean {
        this.anotherSequenceable = sequenceable.readSequenceable(AnotherSequenceableClass);
        return true;
    }
}

在这个例子中,MyClassAnotherSequenceableClass都实现了Sequenceable接口。marshalling方法将anotherSequenceable属性序列化到流中,unmarshalling方法从流中反序列化该属性。

在HarmonyOS鸿蒙Next中,若要在实现Sequenceable接口的类中存储另一个实现Sequenceable接口的属性,可以在marshalling方法中使用ParcelwriteSequenceable方法序列化该属性,在unmarshalling方法中使用readSequenceable方法反序列化。例如:

public class MyClass implements Sequenceable {
    private AnotherSequenceable another;

    @Override
    public boolean marshalling(Parcel out) {
        out.writeSequenceable(another);
        return true;
    }

    @Override
    public boolean unmarshalling(Parcel in) {
        another = in.readSequenceable(AnotherSequenceable.class);
        return true;
    }
}

确保AnotherSequenceable也实现了Sequenceable接口。

回到顶部