Android使用Icepick库保存/恢复捆绑包

Android使用Icepick库保存/恢复捆绑包,android,parceler,Android,Parceler,我试图在我们的应用程序中使用Icepick库来保存和恢复手机轮换时的捆绑包,但是库文档中我找不到好的保存技巧和由@Parcel注释实现的类,这是我在页面上找到的简单类 示例类: @Parcel public class Example { String name; int age; public Example(){ /*Required empty bean constructor*/ } public Example(int age, String nam

我试图在我们的应用程序中使用
Icepick
库来保存和恢复手机轮换时的捆绑包,但是库文档中我找不到好的保存技巧和由
@Parcel
注释实现的类,这是我在页面上找到的简单类

示例
类:

@Parcel
public class Example {
    String name;
    int age;

    public Example(){ /*Required empty bean constructor*/ }

    public Example(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public String getName() { return name; }
    public int getAge() { return age; }

    public String setName(String name) { this.name = name; }
    public int setAge(int age ) { this.age = age; }
}
public class ExampleBundler implements Bundler<Object> {
    @Override
    public void put(String s, Object example, Bundle bundle) {
        bundle.putParcelable(s, Parcels.wrap(example));
    }

    @Override
    public Object get(String s, Bundle bundle) {
        return Parcels.unwrap(bundle.getParcelable(s));
    }
}
ExampleBundler
class:

@Parcel
public class Example {
    String name;
    int age;

    public Example(){ /*Required empty bean constructor*/ }

    public Example(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public String getName() { return name; }
    public int getAge() { return age; }

    public String setName(String name) { this.name = name; }
    public int setAge(int age ) { this.age = age; }
}
public class ExampleBundler implements Bundler<Object> {
    @Override
    public void put(String s, Object example, Bundle bundle) {
        bundle.putParcelable(s, Parcels.wrap(example));
    }

    @Override
    public Object get(String s, Bundle bundle) {
        return Parcels.unwrap(bundle.getParcelable(s));
    }
}

你能修好我的密码吗?感谢advance

修复您的代码,bundler必须实现示例类,而不是常规对象类,因此需要进行更改

    public class ExampleBundler implements Bundler<Object> {
    @Override
    public void put(String s, Object example, Bundle bundle) {
        bundle.putParcelable(s, Parcels.wrap(example));
    }

    @Override
    public Object get(String s, Bundle bundle) {
        return Parcels.unwrap(bundle.getParcelable(s));
    }
}
公共类ExampleBundler实现绑定器{
@凌驾
公共void put(字符串s、对象示例、Bundle){
捆绑。可放置包裹(包裹包裹包裹(示例));
}
@凌驾
公共对象get(字符串s、Bundle){
归还包裹。展开(捆绑。获取包裹);
}
}
对此

public class ExampleBundler implements Bundler<Example> {
    @Override
    public void put(String s, Example example, Bundle bundle) {
        bundle.putParcelable(s, Parcels.wrap(example));
    }

    @Override
    public Example get(String s, Bundle bundle) {
        return Parcels.unwrap(bundle.getParcelable(s));
    }
}
公共类ExampleBundler实现绑定器{
@凌驾
公共void put(字符串s,示例,Bundle){
捆绑。可放置包裹(包裹包裹包裹(示例));
}
@凌驾
公共示例get(字符串s、捆绑包){
归还包裹。展开(捆绑。获取包裹);
}
}
然后,您必须添加
@State(ExampleBundler.class)示例到活动的顶部。在onCreate中添加Icepick.restoreInstanceState(此,savedInstanceState)
和onSavedInstanceState中添加Icepick.saveInstanceState(此,outstate)


而且

为了修复代码,绑定器必须实现示例类而不是通用对象类,因此需要更改

    public class ExampleBundler implements Bundler<Object> {
    @Override
    public void put(String s, Object example, Bundle bundle) {
        bundle.putParcelable(s, Parcels.wrap(example));
    }

    @Override
    public Object get(String s, Bundle bundle) {
        return Parcels.unwrap(bundle.getParcelable(s));
    }
}
公共类ExampleBundler实现绑定器{
@凌驾
公共void put(字符串s、对象示例、Bundle){
捆绑。可放置包裹(包裹包裹包裹(示例));
}
@凌驾
公共对象get(字符串s、Bundle){
归还包裹。展开(捆绑。获取包裹);
}
}
对此

public class ExampleBundler implements Bundler<Example> {
    @Override
    public void put(String s, Example example, Bundle bundle) {
        bundle.putParcelable(s, Parcels.wrap(example));
    }

    @Override
    public Example get(String s, Bundle bundle) {
        return Parcels.unwrap(bundle.getParcelable(s));
    }
}
公共类ExampleBundler实现绑定器{
@凌驾
公共void put(字符串s,示例,Bundle){
捆绑。可放置包裹(包裹包裹包裹(示例));
}
@凌驾
公共示例get(字符串s、捆绑包){
归还包裹。展开(捆绑。获取包裹);
}
}
然后,您必须添加
@State(ExampleBundler.class)示例到活动的顶部。在onCreate中添加Icepick.restoreInstanceState(此,savedInstanceState)
和onSavedInstanceState中添加Icepick.saveInstanceState(此,outstate)


并且

您还需要在onCreate中调用
Icepick.restoreInstanceState(this,savedInstanceState)
,在onCreate中调用
Icepick.saveInstanceState(this,outstate)
onSaveInstanceState@SahithReddy我怎样才能隐藏这一行:
@State(ExampleBundler.class)字符串消息如果它只是一个字符串,您甚至不需要自定义绑定器,只需使用@State即可。如果您希望将整个对象与一起保存,则可以使用自定义绑定器parcelable@SahithReddy这是字符串,但它是错误的,我必须修复,
@state
必须为包裹或其他类型。我不知道好吧对不起,我理解这个问题。首先,我认为您应该
ExampleBundler实现Bundler
应该
ExampleBundler实现Bundler
。因此,在重写的方法中,可以使用示例对象而不是常规对象。然后,添加这个
@State(ExampleBundler.class)示例而不是您的注释。最后,添加我发布的关于Icepick恢复和保存的第一条评论。如果您想了解更多详细信息,我可以发布实际答案而不是评论。您还需要在onCreate中调用
Icepick.restoreInstanceState(this,savedinInstanceState)
,在中调用
Icepick.saveInstanceState(this,outstate)
onSaveInstanceState@SahithReddy我怎样才能隐藏这一行:
@State(ExampleBundler.class)字符串消息如果它只是一个字符串,您甚至不需要自定义绑定器,只需使用@State即可。如果您希望将整个对象与一起保存,则可以使用自定义绑定器parcelable@SahithReddy这是字符串,但它是错误的,我必须修复,
@state
必须为包裹或其他类型。我不知道好吧对不起,我理解这个问题。首先,我认为您应该
ExampleBundler实现Bundler
应该
ExampleBundler实现Bundler
。因此,在重写的方法中,可以使用示例对象而不是常规对象。然后,添加这个
@State(ExampleBundler.class)示例而不是您的注释。最后,添加我发布的关于Icepick恢复和保存的第一条评论。如果你想要更多的细节,我可以发布一个实际的答案,而不是评论。