Android实现关机后数据不会丢失问题

Android实现关机后数据不会丢失问题,第1张

概述Android实现关机数据不会丢失问题 要实现关机后数据也不会丢失,需要使用到 AndroidViewModel,SaveStateHandle 和 SharePreferences 要达到的目的就是将数据保存成这个亚子 就不会出现app在异常闪退或者关机后数据的丢失了注意在使用SaveStateHandle和binding的时候需要在gradle里面设置一波 数据类 package com.example.applicationtest04; import android.app.Application; import androi

要实现关机后数据也不会丢失,需要使用到 AndroIDviewmodel,SaveStateHandle 和 SharePreferences 要达到的目的就是将数据保存成这个亚子


就不会出现app在异常闪退或者关机后数据的丢失了注意在使用SaveStateHandle和binding的时候需要在gradle里面设置一波


数据类

package com.example.applicationtest04;import androID.app.Application;import androID.content.Context;import androID.content.SharedPreferences;import androIDx.annotation.NonNull;import androIDx.lifecycle.AndroIDviewmodel;import androIDx.lifecycle.liveData;import androIDx.lifecycle.mutablelivedata;import androIDx.lifecycle.SavedStateHandle;public class Myviewmodel extends AndroIDviewmodel { SavedStateHandle handle; //声明savedstatehandle 类型 String shpname = getApplication().getResources().getString(R.string.shp_name); String key = getApplication().getResources().getString(R.string.key); public Myviewmodel(@NonNull Application application,SavedStateHandle handle) {  super(application);  this.handle = handle;  if(!handle.contains(key)){   load();  } } public liveData<Integer> getNumber(){  return handle.getliveData(key); } public voID load(){  SharedPreferences shp = getApplication().getSharedPreferences(shpname,Context.MODE_PRIVATE);  int x = shp.getInt(key,0);  handle.set(key,x); } public voID save(){  SharedPreferences shp = getApplication().getSharedPreferences(shpname,Context.MODE_PRIVATE);  SharedPreferences.Editor editor = shp.edit();  editor.putInt(key,getNumber().getValue());  editor.apply(); } public voID add(int x){  handle.set(key,getNumber().getValue()+x); }}//这段代码里面有几个重要的点就是在使用handle的时候要注意使用的数据是liveData

Mainactive类

package com.example.applicationtest04;import androIDx.appcompat.app.AppCompatActivity;import androIDx.databinding.DataBindingUtil;import androIDx.lifecycle.SavedStateVMFactory;import androIDx.lifecycle.viewmodelProvIDer;import androIDx.lifecycle.viewmodelProvIDers;import androID.os.Bundle;import com.example.applicationtest04.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity { Myviewmodel myviewmodel; ActivityMainBinding binding; @OverrIDe protected voID onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  binding = DataBindingUtil.setContentVIEw(this,R.layout.activity_main);  this.myviewmodel = viewmodelProvIDers.of(this,new SavedStateVMFactory(this)).get(Myviewmodel.class);  binding.setData(myviewmodel);  binding.setlifecycleOwner(this); } @OverrIDe protected voID onPause() {  super.onPause();  myviewmodel.save(); }}//这段代码的重点就是使用onPause这个声明周期的函数来调用save()函数

布局xml

<?xml version="1.0" enCoding="utf-8"?><layout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" xmlns:tools="http://schemas.androID.com/tools"> <data>  <variable   name="Data"   type="com.example.applicationtest04.Myviewmodel" /> </data> <androIDx.constraintlayout.Widget.ConstraintLayout  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent"  tools:context=".MainActivity">  <TextVIEw   androID:layout_wIDth="wrap_content"   androID:layout_height="wrap_content"   androID:text="@{String.valueOf(Data.getNumber())}"   androID:textcolor="@color/colorPrimaryDark"   androID:textSize="36sp"   app:layout_constraintBottom_toBottomOf="parent"   app:layout_constraintHorizontal_bias="0.497"   app:layout_constraintleft_toleftOf="parent"   app:layout_constraintRight_toRightOf="parent"   app:layout_constrainttop_totopOf="parent"   app:layout_constraintVertical_bias="0.324" />  <button   androID:ID="@+ID/button"   androID:layout_wIDth="wrap_content"   androID:layout_height="wrap_content"   androID:layout_marginStart="8dp"   androID:layout_margintop="8dp"   androID:layout_marginEnd="8dp"   androID:layout_marginBottom="8dp"   androID:text="@string/buttonPlus"   androID:onClick="@{()->Data.add(1)}"   app:layout_constraintBottom_toBottomOf="parent"   app:layout_constraintEnd_toEndOf="parent"   app:layout_constraintHorizontal_bias="0.182"   app:layout_constraintStart_toStartOf="parent"   app:layout_constrainttop_totopOf="parent"   app:layout_constraintVertical_bias="0.499" />  <button   androID:ID="@+ID/button2"   androID:layout_wIDth="wrap_content"   androID:layout_height="wrap_content"   androID:layout_marginStart="8dp"   androID:layout_margintop="8dp"   androID:layout_marginEnd="8dp"   androID:layout_marginBottom="8dp"   androID:text="@string/buttonSub"   androID:onClick="@{()->Data.add(-1)}"   app:layout_constraintBottom_toBottomOf="parent"   app:layout_constraintEnd_toEndOf="parent"   app:layout_constraintHorizontal_bias="0.804"   app:layout_constraintStart_toStartOf="parent"   app:layout_constrainttop_totopOf="parent"   app:layout_constraintVertical_bias="0.499" /> </androIDx.constraintlayout.Widget.ConstraintLayout></layout>

测试效果先加到12


再重启


重启之后重新打开app


值还是没有变化测试成功

总结

以上所述是小编给大家介绍的AndroID实现关机后数据不会丢失问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

总结

以上是内存溢出为你收集整理的Android实现关机后数据不会丢失问题全部内容,希望文章能够帮你解决Android实现关机后数据不会丢失问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1144332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存