2016-07-26 4 views
0

Я пытаюсь использовать библиотеку Icepick в нашем приложении для сохранения и восстановления пакета на телефоне, но документация библиотеки я не могу найти хорошие советы для сохранения и классы, которые реализованы в @Parcel аннотация это просто класс, который я нашел о страницеAndroid использовать библиотеку Icepick для сохранения/восстановления пакета

Example класс:

@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; } 
} 

ExampleBundler класс:

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)); 
    } 
} 

Хорошо, теперь как я могу использовать это на Activity?

это мой простой код, который я пытаюсь сохранить и восстановить

public class MainActivity extends BaseActivity { 

    /* @State(ExampleBundler.class) String message; */ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Example example = new Example(); 
    example.setName = "HELLO WORLD"; 
    example.setAge = 99; 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
    } 

    public void onRestoreInstanceState(Bundle inState) { 
    } 
} 

могли бы вы исправить мой код? Спасибо заранее

+0

Вы также должны вызвать 'Icepick.restoreInstanceState (это, savedInstanceState)' в OnCreate и 'Icepick.saveInstanceState (это, outstate)' в onSaveInstanceState –

+0

@SahithReddy и как я могу использовать эту строку: '@State (ExampleBundler.class) String message;' –

+0

Если это просто строка, вам даже не нужен пользовательский связующий, вы можете просто использовать @State. custom bundler - это если вы хотите сохранить целый объект в сочетании с parcelable –

ответ

2

Чтобы исправить код, пакетирования должен реализовать пример класса не общий класс объекта так изменить

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)); 
    } 
} 

этой

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)); 
    } 
} 

Затем, вы должны добавить @State(ExampleBundler.class) Example example; к началу вашей деятельности. В вашем OnCreate добавить Icepick.restoreInstanceState(this, savedInstanceState) и в вашем onSavedInstanceState добавить Icepick.saveInstanceState(this,outstate)

Icepick documentation и parceler