美文网首页
kotlin-Android储存

kotlin-Android储存

作者: jeffrey12138 | 来源:发表于2020-10-22 17:23 被阅读0次

    因本人才学疏浅,所以写得这个可能不太准确,但是,也是目前自己的一个理解,所以请各位看官请海涵。
    存储方式分为三大部分:
    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

    相关文章

      网友评论

          本文标题:kotlin-Android储存

          本文链接:https://www.haomeiwen.com/subject/slhjmktx.html