I am following this codelab from google but it fails to saved the data. Here is the link
https://codelabs.developers.google.com/codelabs/android-lifecycles/#6
Activity Class
public class SavedStateActivity extends AppCompatActivity {
private SavedStateViewModel mSavedStateViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.saved_state_activity);
// Obtain the ViewModel
// mSavedStateViewModel = new ViewModelProvider(this).get(SavedStateViewModel.class);
mSavedStateViewModel = new ViewModelProvider(this,new SavedStateViewModelFactory(getApplication(),this)).get(SavedStateViewModel.class);
// Show the ViewModel property's value in a TextView
mSavedStateViewModel.getName().observe(this, new Observer<String>() {
@Override
public void onChanged(String savedString) {
((TextView)findViewById(R.id.saved_vm_tv))
.setText(getString(R.string.saved_in_vm, savedString));
}
});
// Save button
findViewById(R.id.save_bt).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String newName = ((EditText)findViewById(R.id.name_et)).getText().toString();
mSavedStateViewModel.saveNewName(newName);
}
});
}
}
viewmodel class
public class SavedStateViewModel extends ViewModel {
private static final String NAME_KEY = "name";
private SavedStateHandle mState;
public SavedStateViewModel(SavedStateHandle savedStateHandle) {
mState = savedStateHandle;
}
// Expose an immutable LiveData
LiveData<String> getName() {
// getLiveData obtains an object that is associated with the key wrapped in a LiveData
// so it can be observed for changes.
return mState.getLiveData(NAME_KEY);
}
void saveNewName(String newName) {
// Sets a new value for the object associated to the key. There's no need to set it
// as a LiveData.
mState.set(NAME_KEY, newName);
}
}
As you can see I already add the SavedStateViewModelFactory
at
mSavedStateViewModel = new ViewModelProvider(this,new SavedStateViewModelFactory(getApplication(),this)).get(SavedStateViewModel.class);
But nothing work when I destroyed the app and open it back the data still not persist.
The solution still in beta for the saved state said by Google. The only solution, for now, to persist the data is using Room.