美文网首页
SharedPreferences存储数据

SharedPreferences存储数据

作者: 鴻9527 | 来源:发表于2019-08-09 21:34 被阅读0次

    Android的存储方式

    使用SharedPreferences存储数据
    文件存储数据
    SQLite数据库存储数据
    使用ContentProvider存储数据
    网络存储数据

    SharedPreferences
    是一个采用Key/value的方式存储轻量级数据的接口。

    轻量级的数据存储方式
    采用Key/value的方式进行映射

    SharedPreferences的简单使用

    初始化SharedPreferences
    /***
    * 获得SharedPreferences对象 单例
    * name --> 存储的文件名
    * MODE_APPEND:检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
    * MODE_WORLD_WRITEABLE:允许其他应用写入数据到该文件。
    * MODE_WORLD_READABLE:允许其他应用读取该文件
    * MODE_PRIVATE:默认操作模式,代表该文件是私有数据,只能被应用本身访问
    *
    */
    sharedPreferences = getSharedPreferences("name", Context.MODE_PRIVATE);

    存储数据
    //以键值对的方式存储数据
    SharedPreferences.Editor edit = sharedPreferences.edit();
    edit.putString("userName","姓名");
    edit.putString("password","密码");
    edit.commit();

    读取数据
    /***
    * 读取数据
    * s --> key
    * s1 --> 默认值
    */
    String inputUserName = sharedPreferences.getString("userName", "无数据");
    String inputPassword = sharedPreferences.getString("password", "无数据");
    Toast.makeText(this, "userName -->"+inputUserName+"\tpassword -->"+inputPassword, Toast.LENGTH_SHORT).show();

    删除数据
    SharedPreferences.Editor edit = sharedPreferences.edit();
    //根据key删除值
    SharedPreferences.Editor userName = edit.remove("userName");
    edit.commit();

    清空
    SharedPreferences.Editor edit = sharedPreferences.edit();
    //清空数据
    SharedPreferences.Editor clear = edit.clear();
    edit.commit();

    数据存储的位置 : data/应用程序包名/shared_prefs/文件名.xml

    如何添加Android 6.0运行时权限
    import android.Manifest;
    import android.content.pm.PackageManager;
    import android.os.Build;
    import android.os.Bundle;
    import android.widget.Toast;

    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.core.app.ActivityCompat;
    import androidx.core.content.ContextCompat;

    public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getAccess();
    }
    
    private void getAccess() {
        /***
         * Build.VERSION.SDK_INT :SDK版本
         * Build.VERSION_CODES.M:常量23,即android 6.0  对应得API版本号
         */
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            /***
             * hasAccess == 0 拥有该权限
             * hasAccess == 1 未拥有该权限
             */
            int hasAccess = ContextCompat.checkSelfPermission(getApplication(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
            //获得授权
            if(hasAccess == PackageManager.PERMISSION_GRANTED){
    
            } else {
                //未获得授权 会弹出一个对话框(不能自定义),用户选择是否授权
                /***
                 * 当前上下文环境
                 * 需要授权的字符串数组
                 * 请求码 requestCode 在回调方法中会用到
                 */
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
            }
        } else{
            //6.0以下直接使用
        }
    }
    
    /***
     * 用户选择是否同意授权后,调用的方法
     * @param requestCode 请求码
     * @param permissions 请求的权限数组
     * @param grantResults 请求权限的结果数组
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 1){
            //确定了授权
            if(permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE) && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                Toast.makeText(this, "确定了授权", Toast.LENGTH_SHORT).show();
            } else {
                //取消了授权
                Toast.makeText(this, "取消了授权", Toast.LENGTH_SHORT).show();
            }
        }
    }
    

    }

    相关文章

      网友评论

          本文标题:SharedPreferences存储数据

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