初识MMKV
这个工具是我在github上瞎逛的时候,发现的一个牛逼轰轰的持久化储存工具。按照其官方文档上的介绍,这个是采用MMap技术进行的高效率Key Value储存工具。这个直接对飙的就是android传统的sharedpreference
。
MMKV的“firstBlood”
计划使用MMKV进行一个简单的数据储存,登陆界面上对于用户的账号密码等进行储存。常见的登陆模式中就会有一个勾选框,确定是否储存(保留)相关的数据。我之前就写过一些简单的登陆界面,不过考虑到还需要一个勾选框进行数据的保存确认。所以需要再去构建一个,勾选框checkbox。 因为github打开实在是慢,本想好好阅读鹅厂家的文档看看这个到底是个什么东西。先参考其他人依照这个构建的Demo进行学习。
整理思路,checkBox的勾选肯定要通过一个持久化的储存工具进行储存——避免该app消亡后,整个数据的丢失。这里计划使用SharedPerference进行储存。
用法有些遗忘了,回过头再接着看看:
SharedPreferences sharedPreferences = getSharedPreferences("test", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
Q:业务逻辑还是存在一定问题,为啥没有保存和重新在EditText中展示呢?
A:重新组织代码逻辑,还有确定是否写对同一个Key!!!
package com.example.mmkvtest;
import androidx.appcompat.app.AppCompatActivity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
import com.tencent.mmkv.MMKV;
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MMKV";
// ui assets
private EditText userName,roomName;
private CheckBox save;
private Button login;
//MMKV
private MMKV mmkv;
//save boolean
private static Boolean isSave;
// info
String user;
String room;
//sharedPrefenrce
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_activiy);
// 初始化新的MMKV根目录
String rootDir = MMKV.initialize(this);
mmkv = MMKV.defaultMMKV();
sharedPreferences = getSharedPreferences("save",MODE_PRIVATE);
editor = sharedPreferences.edit();
checkSave();
initUi();
setUIFunction();
}
private void checkSave() {
isSave = sharedPreferences.getBoolean("isSave",false);
}
private void setUIFunction() {
//button
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(save.isChecked()){
//被勾选
user = userName.getText().toString();
room = roomName.getText().toString();
mmkv.encode("user",user);
mmkv.encode("room",room);
editor.putBoolean("isSave",true);
editor.commit();
Toast.makeText(getApplicationContext(),"save in MMKV successfully",Toast.LENGTH_SHORT).show();
}
//跳转
TestActivity.startActivity(MainActivity.this);
}
});
}
private void initUi() {
userName = findViewById(R.id.editText_userName);
roomName = findViewById(R.id.editText_RoomName);
login = findViewById(R.id.button_login);
save = findViewById(R.id.checkbox_save_date);
if(isSave){
user = mmkv.decodeString("user");
room = mmkv.decodeString("room");
userName.setText(user);
roomName.setText(room);
save.setChecked(true);
}
}
}
以上的代码实例是结合两者的使用进行编写的,这样就更容易清晰了解两者的异同。