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恢复和保存的第一条评论。如果你想要更多的细节,我可以发布一个实际的答案,而不是评论。