Android本地存储方法浅析介绍
本地存储案例
该方法仅适用于保存一些比较简单的,运行时并不占用过多内存的小字段
原理介绍
我们需要完成这么一个 app:
- 在文本框输入文字后退出 app 会自动存储
- 下次打开后,检测到存储的文本文件,自动获取他并输出到文本框里
首先需要清楚:
本案例文件存储的位置是:data/data/你的工程包名/files/xxx
当手机内存不够时,data/data
目录下的文件会被自动清理以腾出空间,所以本方法不具有持久化存储的功效!
下面介绍几个获取不同存储路径的方法:
- getCacheDir():/data/data/你的应用的包名/cache
- getFilesDir():/data/data/你的应用的包名/files
- getExternalFilesDir():SDCard/Android/data/你的应用的包名/files/
- getExternalCacheDir():SDCard/Android/data/你的应用包名/cache/
一般的,由于目前手机都是一体机且无法再扩展外存,所以存储到 SD 卡的解决方式可行性较高!
设置文本输入框
在 mainactivity 的布局文件随意添加一个文本输入框
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editText" android:hint="请输入内容"/> </LinearLayout>
存储读取数据
首先我们需要定义一个存储文件的方法
private fun save(inputText: String) { try { // 打开输出文件,如果不存在就新建一个 val output = openFileOutput("data", Context.MODE_PRIVATE) // 设置输出流 val writer = BufferedWriter(OutputStreamWriter(output)) // 使用use语法,在输出所有内容完毕后就会自动关闭流,不需要手动关闭了! writer.use { it.write(inputText) } } catch (e: IOException) { e.printStackTrace() } }
既然有了存储,那必须还有一个读取,依葫芦画瓢即可
private fun load(): String { // 存储获取到的文本 val content = StringBuilder() try { // 打开文件 val input = openFileInput("data") // 设置输入流 val reader = BufferedReader(InputStreamReader(input)) reader.use { // 逐行输入到content变量 reader.forEachLine { content.append(it) } } } catch (e: IOException) { e.printStackTrace() } // 返回得到的文字文本数据 return content.toString() }
理解完以上两个主要代码后,我们组合到 MainActivity.kt
文件内,最终得到的代码如下:
package com.zhiyiyi.listviewdemo import android.content.Context import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Toast import kotlinx.android.synthetic.main.activity_main.* import java.io.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // activity打开前读取存储的文件,拿出内容 val inputText = load() if (inputText.isNotEmpty()) { editText.setText(inputText) editText.setSelection(inputText.length) Toast.makeText(this, "Restoring succeeded", Toast.LENGTH_SHORT).show() } } // activity销毁前执行存储方法 override fun onDestroy() { super.onDestroy() val inputText = editText.text.toString() save(inputText) } // 存储 private fun save(inputText: String) { try { val output = openFileOutput("data", Context.MODE_PRIVATE) val writer = BufferedWriter(OutputStreamWriter(output)) writer.use { it.write(inputText) } } catch (e: IOException) { e.printStackTrace() } } // 读取 private fun load(): String { val content = StringBuilder() try { val input = openFileInput("data") val reader = BufferedReader(InputStreamReader(input)) reader.use { reader.forEachLine { content.append(it) } } } catch (e: IOException) { e.printStackTrace() } return content.toString() } }
END,直接点击测试就可以看到结果了!
到此这篇关于Android本地存储方法浅析介绍的文章就介绍到这了,更多相关Android本地存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
使用TransitionDrawable实现多张图片淡入淡出效果
这篇文章主要为大家详细介绍了使用TransitionDrawable实现多张图片淡入淡出效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-08-08Android中ListView + CheckBox实现单选、多选效果
这篇文章主要介绍了Android中ListView + CheckBox实现单选、多选效果,非常不错,具有参考借鉴价值,需要的朋友可以参考下2017-02-02Android Drawerlayout侧拉栏事件传递问题的解决方法
这篇文章主要为大家详细介绍了Android Drawerlayout侧拉栏事件传递问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-11-11Android四大组件之BroadcastReceiver详解
今天小编就为大家分享一篇关于Android四大组件之BroadcastReceiver详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-01-01
最新评论