kotlin-Android储存

2020-10-22  本文已影响0人  jeffrey12138

因本人才学疏浅,所以写得这个可能不太准确,但是,也是目前自己的一个理解,所以请各位看官请海涵。
存储方式分为三大部分:
1 SharedPreferences
2 外部储存
3 内部储存
SharedPreferences适合用于类似登陆信息,简单的配置信息,它以xml的格式进行保存,保存的位置可以通过下面的方式进行查看


image.png image.png

然后在data/data目录下找到自己的项目打开shared_prefs,就可以看到的配置的信息了

然后说下怎么使用,这个也比较简单

class SharedPreferencesActivity : AppCompatActivity() {
    private lateinit var edContent:EditText
    private lateinit var btnWrite:Button
    private lateinit var btnRead:Button
    private lateinit var tvContent:TextView
    private lateinit var content:String
    private lateinit var readContent:String
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_shared_preferences)
        initView()
        onClickListener()
    }

    private fun onClickListener() {
        btnWrite.setOnClickListener {
            content=edContent.text.toString()
            if (content.isEmpty()){
                Toast.makeText(this,"请输入内容,内容不能为空",Toast.LENGTH_SHORT).show()
            }else{
                writeSp(content)
            }
        }
        btnRead.setOnClickListener {
            readSp()
        }
    }

    private fun readSp() {
        val sp=getSharedPreferences("jeffrey", Context.MODE_PRIVATE)
        readContent=sp.getString("content","").toString()
        tvContent.text=readContent
    }

    private fun writeSp(content:String) {
        //创建SharedPreferences对象 参数1:文件名,参数2:保存模式,建议使用MODE_PRIVATE,只让自己的项目使用
        val sp=getSharedPreferences("jeffrey", Context.MODE_PRIVATE)
        //创建Editor对象
        val editor=sp.edit()
        //保存数据
        editor.putString("content",content)
        //提交,这一步十分关键,需要提交才算是保存成功
        editor.commit()
    }

    private fun initView() {
        edContent=findViewById(R.id.ed_content)
        btnWrite=findViewById(R.id.btn_write)
        btnRead=findViewById(R.id.btn_read)
        tvContent=findViewById(R.id.tv_content)

    }
}

然后外部存储,前面基本一致,只是路径设置和保存方式有点不一样

private fun onClickListener() {
        //文件路径,Environment.getExternalStorageDirectory()方法已经被弃用了,而且使用
        //getExternalFilesDir(null)的话还不需要申请权限的说
        path=getExternalFilesDir(null)?.absolutePath+"jeffrey.txt"
        val file=File(path)
        btnWrite.setOnClickListener {
            content=edContent.text.toString()
            //判断文件是否存在
            if (!file.exists()){
                //创建文件
                file.createNewFile()
            }
            //以字节流的方式输送数据
            val fos=FileOutputStream(file)
            fos.write(content.toByteArray())
            Toast.makeText(this,"写入成功", Toast.LENGTH_SHORT).show()
        }
        btnRead.setOnClickListener {
            val fos=FileInputStream(path)
            val byte=ByteArray(1024)
            val len=fos.read(byte)
            readContent= String(byte,0,len)
            tvContent.text=readContent
        }
    }

然后是内部存储,其实和外部储存方式是一样的,只是路径不同罢了

  private fun onClickListener() {
        val file=File(filesDir,"jeffrey.txt")
        btnWrite.setOnClickListener {
            content=edContent.text.toString()
            if (!file.exists()){
                file.createNewFile()
            }
            val fos=FileOutputStream(file)
            fos.write(content.toByteArray())
            Toast.makeText(this,"写入成功", Toast.LENGTH_SHORT).show()
        }
        btnRead.setOnClickListener {
            val fos=FileInputStream(file)
            val byte=ByteArray(1024)
            val len=fos.read(byte)
            readContent= String(byte,0,len)
            tvContent.text=readContent
            Toast.makeText(this,"读取成功", Toast.LENGTH_SHORT).show()
        }

    }

我这里只是简单说了下使用方法,具体储存的路径不同会造成什么不同的结果的话,建议看下这些书友写的吧,他们已经写得非常详细了
https://blog.csdn.net/u012702547/article/details/50269639
https://juejin.im/post/6844903669704425485

上一篇 下一篇

猜你喜欢

热点阅读