Android实现手机内存存储功能

简介: Android实现手机内存存储功能

效果图

点击存入,点击获取 吐司结果

写入数据

读取数据

源码

AddDataTestActivity

package com.gaojc.activity;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.gaojc.text.R;
import com.gaojc.text.Utils.LogUtil;
import com.gaojc.text.Utils.SharedPreferencesUtil;

public class AddDataTestActivity extends AppCompatActivity {

    // 需要存入的数据(这里为了方便,所以使用假数据)
    private final static String CODE = "ABC666";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_data_test);


        /**
         * 存入数据
         */
        findViewById(R.id.saveData).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SharedPreferencesUtil.getInstance(AddDataTestActivity.this).putString("code",CODE);
            }
        });


        /**
         * 获取数据
         */
        findViewById(R.id.getData).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String code = SharedPreferencesUtil.getInstance(AddDataTestActivity.this).getString("code");
                Toast.makeText(AddDataTestActivity.this,"code:" + code,Toast.LENGTH_LONG).show();
                LogUtil.e("code:" + code);
            }
        });

    }
}

activity_add_data_test.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.gaojc.activity.AddDataTestActivity">

    <Button
        android:id="@+id/saveData"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="存入"
        android:layout_gravity="left"/>

    <Button
        android:id="@+id/getData"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取"
        android:layout_gravity="right"/>

</FrameLayout>

SharedPreferencesUtil

package com.gaojc.text.Utils;

import android.content.Context;
import android.content.SharedPreferences;
import android.text.TextUtils;

public class SharedPreferencesUtil {

    private static SharedPreferences mSharedPreferences; //保存数据接口
    private static SharedPreferences.Editor mEditor; //Editor对象用来写入数据
    private static SharedPreferencesUtil mSharedPreferencesUtil;


    // 构造方法
    public SharedPreferencesUtil(Context context) {
        /**
         * context.getSharedPreferences:获取SharedPreferences实例
         *      Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读写
         */
        mSharedPreferences = context.getSharedPreferences("config", Context.MODE_PRIVATE);
        // 获取Editor对象
        mEditor = mSharedPreferences.edit();
    }

    // 单例模式
    public static SharedPreferencesUtil getInstance(Context context) {
        if (mSharedPreferencesUtil == null) {
            mSharedPreferencesUtil = new SharedPreferencesUtil(context);
        }
        return mSharedPreferencesUtil;
    }

    // 存入数据
    public void putString(String key, String value) {
        if (TextUtils.isEmpty(value)) {
            value = "";
        }
        // apply():提交
        mEditor.putString(key, value).apply();
    }

    // 获取数据
    public String getString(String key) {
        return mSharedPreferences.getString(key, "");
    }
}

Log打印日志类(LogUtil)

---------------------------------

SharedPreferences.Editor的commit()方法和apply()方法的区别

Android存储(SharedPreferences.Editor)commit()和apply()区别:

commit和apply虽然都是原子性操作,但是原子的操作不同,commit是原子提交到数据库,从提交数据到存在磁盘中都是同步过程;

而apply方法的原子操作是原子提交到内存中,而非数据库,之后再异步提交数据到数据库中。

commit提交是同步过程,效率会比apply异步提交的速度慢,有返回值;apply没有返回值,无法知道存储是否失败。

在不关心提交结果是否成功的情况下,优先考虑apply方法。

---------------------------------

目录
相关文章
|
12天前
|
存储 缓存
使用tp5内cache缓存,存储手机短信验证码
使用tp5内cache缓存,存储手机短信验证码
16 1
|
13天前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
23 2
|
16天前
|
存储
数据在内存中的存储(2)
数据在内存中的存储(2)
25 5
|
16天前
|
存储 小程序 编译器
数据在内存中的存储(1)
数据在内存中的存储(1)
30 5
|
17天前
|
存储 安全 Java
SpringSecurity6从入门到实战之初始用户如何存储到内存
Spring Security 在 SpringBoot 应用中默认使用 `UserDetailsServiceAutoConfiguration` 类将用户信息存储到内存中。当classpath有`AuthenticationManager`、存在`ObjectPostProcessor`实例且无特定安全bean时,此配置生效。`inMemoryUserDetailsManager()`方法创建内存用户,通过`UserDetails`对象填充`InMemoryUserDetailsManager`的内部map。若要持久化到数据库,需自定义`UserDetailsService`接口实
|
16天前
|
存储 编译器 C语言
数据在内存中的存储
数据在内存中的存储
18 2
|
16天前
|
存储
数据在内存中的存储(了解数据在内存中的存储规则,看这一篇就够了!)
数据在内存中的存储(了解数据在内存中的存储规则,看这一篇就够了!)
|
17天前
|
数据库 Android开发 数据安全/隐私保护
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
61 2
|
6天前
|
存储