Android 第三十一章 数据存储

一、共享参数

object SharedPreferencesUtil {
    /**
     * Context mContext 上下文
     * String tag SharedPreferences 名称
     * String name 保存名称
     * String data 保存内容
     * Context.MODE_PRIVATE 私有的
     */
    fun writeData(mContext: Context, tag: String, name: String, data: String) {
        val editor = mContext.getSharedPreferences(tag, Context.MODE_PRIVATE).edit()
        editor.putString(name, data)
        editor.apply()
    }

    /**
     * Context mContext 上下文
     * String tag SharedPreferences 名称
     * String name 保存名称
     * Context.MODE_PRIVATE 私有的
     */
    fun readData(mContext: Context, tag: String, name: String): String {
        val sharedPreferences = mContext.getSharedPreferences(tag, Context.MODE_PRIVATE)
        val data = sharedPreferences.getString(name, "")
        if (null != data) return data
        return ""
    }
}

二、内部存储

/**
 * 读写权限
 * <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 */
object InternalStorageUtil {

    /**
     * 保存
     */
    fun write(mContext: Context, fileName: String, data: String) {
        try {
            val ofo = mContext.openFileOutput(fileName, Context.MODE_PRIVATE)
            ofo.write(data.toByteArray())
            ofo.close()
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    /**
     * 读取
     */
    fun read(mContext: Context, fileName: String): String {
        try {
            val ofi = mContext.openFileInput(fileName);
            val buffer = ByteArray(ofi.available())

            val sb = StringBuilder()
            var hasRead = 0
            while (ofi.read(buffer).also { hasRead = it } != -1) sb.append(
                String(
                    buffer,
                    0,
                    hasRead
                )
            )
            ofi.close()
            return sb.toString()
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return ""
    }

    /**
     * 删除
     */
    fun delete(mContext: Context, fileName: String) {
        mContext.deleteFile(fileName)
    }
}

三、SD卡存储

/**
 * 读写权限
 * <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 */

object ReadWriteSDUtil {
    // 向SD卡写入数据
    fun write(filePath: String, name: String, str: String) {
        try {
            // 判断是否存在SD卡
            if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
                // 获取SD卡的目录
                val sdPath = Environment.getExternalStorageDirectory()
                val p1 = sdPath.path.toString() + "/$filePath"
                val f1 = File(p1)
                if (!f1.exists()) {
                    f1.mkdir()
                }
                val p2: String = sdPath.path.toString() + "/$filePath/data/"
                val f2 = File(p2)
                if (!f2.exists()) {
                    f2.mkdirs()
                }
                val fos = FileOutputStream("$p2/$name.txt")
                fos.write(str.toByteArray())
                fos.flush()
                fos.fd.sync()
                fos.close()
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    //读取sd卡数据
    fun read(filePath: String, name: String): String {
        try {
            val file = File(Environment.getExternalStorageDirectory().canonicalPath + "/$filePath/data/" + name + ".txt")
            if (file.exists()) {
                val fis = FileInputStream(file)
                val buffer = ByteArray(1024)
                var hasRead = 0
                val sb = StringBuilder()
                while (fis.read(buffer).also { hasRead = it } != -1) sb.append(
                    String(
                        buffer,
                        0,
                        hasRead
                    )
                )
                fis.close()
                return sb.toString()
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return ""
    }
}

四、数据库存储

class MySQLiteOpenHelper(private val mContext: Context, name: String, version: Int) :
    SQLiteOpenHelper(mContext, name, null, version) {

    private val createUser = "create table user(id integer primary key autoincrement," +
            "name text," +
            "sex text," +
            "age integer," +
            "phone text)"

    //创建
    override fun onCreate(db: SQLiteDatabase?) {
        db?.execSQL(createUser)
    }

    //升级或者更新
    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
    	db?.execSQL("alter table user add address text");
    }
}
/**
    buildFeatures{
        viewBinding= true
    }
*/
class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        initData()
    }

    private fun initData() {

        val dbHelper = MySQLiteOpenHelper(this, "User.db", 1)

        val db = dbHelper.writableDatabase

        binding.btnCreate.setOnClickListener {
            dbHelper.writableDatabase
        }
        binding.btnUpdate.setOnClickListener {

        }

        binding.btnAdd.setOnClickListener {
            var data = ContentValues().apply {
                put("name", "小刚")
                put("sex", "男")
                put("age", 25)
                put("phone", "12345678910")
            }
            db.insert("user", null, data)
        }

        binding.btnQuery.setOnClickListener {
            val sb = StringBuffer()
            val cursor = db.query("user", null, null, null, null, null, null)
            if (cursor.moveToFirst()) {
                do {
                    val name = cursor.getString(cursor.getColumnIndex("name"))
                    val phone = cursor.getString(cursor.getColumnIndex("phone"))
                    sb.append("name: $name , tel: $phone")
                } while (cursor.moveToNext())
            }
            cursor.close()
            Log.d("data", sb.toString())
        }

        binding.btnModify.setOnClickListener {
            val data = ContentValues().apply {
                put("age", "20")
            }
            db.update("user", data, "name=?", arrayOf("小明"))
        }

        binding.btnDelete.setOnClickListener {
            db.delete("user", "name=?", arrayOf("小明"))
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_dialog"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:layout_marginTop="100dp"
        android:text="自定义弹窗"
        android:visibility="gone" />

    <Button
        android:id="@+id/btn_create"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_marginTop="80dp"
        android:text="创建数据库"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btn_update"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_marginTop="30dp"
        android:text="升级数据库"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btn_add"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_marginTop="30dp"
        android:text="添加"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btn_query"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_marginTop="30dp"
        android:text="查询"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btn_modify"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_marginTop="30dp"
        android:text="修改"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btn_delete"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_marginTop="30dp"
        android:text="删除"
        android:textSize="20sp" />


</LinearLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值