Android >> 17. ViewModel(二)

这次我们实现让程序在后台被系统关闭之后仍能够记住数据

build.gradle

  1. 首先我们在build.gradle 文件dependencies 中增加这么一行代码:
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02'

ViewModel 文件

  1. 然后回到我们创建的ViewModel java文件中,为这个继承自ViewModel 的public 类增加构造函数:
private SavedStateHandle handle;

ViewModelWithLiveData(SavedStateHandle handle){
    this.handle = handle;
}

MainActivity.java

  1. 既然我们对这个ViewModel 类增加了构造函数,那我们势必在对其实例化的时候也要带入一个SavedStateHandle 类型对象:
viewModelWithLiveData = ViewModelProviders.of(this, new SavedStateViewModelFactory(this)).get(ViewModelWithLiveData.class);
  1. 我们知道,savedInstanceState 是以键值对的方式存储数据的,那SavedStateHandle 中的数据也会是键值对的形式
    所以,我们需要为我们需要存储的数据创建一个“键”:
public final static String KEY_IP = "ip_address";
public final static String KEY_PORT = "port_address";

ViewModel 文件

  1. 有了“键”,当然就要初始化值了:
public MutableLiveData<String> getLikedNumber_ip() {
    if (!handle.contains(MainActivity.KEY_IP)){
        handle.set(MainActivity.KEY_IP, "");
    }
    return handle.getLiveData(MainActivity.KEY_IP);
}

public MutableLiveData<String> getLikedNumber_port() {
    if (!handle.contains(MainActivity.KEY_PORT)){
        handle.set(MainActivity.KEY_PORT, "");
    }
    return handle.getLiveData(MainActivity.KEY_PORT);
}

这是对两对键值对进行初始化的程序,我们用这两个方法进行数据的读取,若没有则向handle 中增添一对键值对

设置数据的代码:

public void setEditText_ip(String string){
    handle.set(MainActivity.KEY_IP, string);
}

public void setEditText_port(String string){
    handle.set(MainActivity.KEY_PORT, string);
}

如此一来,我们的数据在程序在后台被系统杀掉后仍能进行保存,但还不是永久性地保存于系统中,下一节将会讲解如何永久性地保存于系统中

你可能感兴趣的:(Android,安卓开发)