博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第5天SharedPreferences存储+SD卡存储
阅读量:3787 次
发布时间:2019-05-22

本文共 9749 字,大约阅读时间需要 32 分钟。

第5天SharedPreferences存储+SD卡存储

安卓的5大存储

一.SharedPreferences(******)

1.sp介绍

  • 保存少量的数据,且这些数据的格式非常简单。 存储5种原始数据类型: boolean, float, int, long, String

  • 比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),记住密码功能,音乐播放器播放模式。

  • 存哪了: /data/data/应用程序包名/shared_prefs/Xxx.xml文件,以Key-Value的格式存储

  • 技能要点: (1)如何存储数据 (2)如何获取数据

2.如何存储数据

步骤1:得到SharedPreferences对象 getSharedPreferences(“文件的名称”,“文件的类型”);

(1).Context.MODE_PRIVATE:指定该SharedPreferences数据只能被应用程序读写
(2)MODE_APPEND:检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
(3).Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他
应用程序读,但不能写。
(4).Context,MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序写,但不能读。
步骤2:得到 SharedPreferences.Editor编辑对象
SharedPreferences.Editor editor=sp.edit();
步骤3:添加数据
editor.putBoolean(key,value)
editor.putString()
editor.putInt()
editor.putFloat()
editor.putLong()
步骤4:提交数据 editor.commit()

Editor其他方法: editor.clear() 清除数据 editor.remove(key) 移除指定key对应的数据

//SP写数据    private void write() {
//TODO 1:得到SharedPreferences对象 //参数一 xml文件的名字 参数二 模式 MODE_PRIVATE 指定该SharedPreferences数据只能被本应用程序读写 SharedPreferences preferences = getSharedPreferences("songdingxing", MODE_PRIVATE); //TODO 2:获得编辑对象 SharedPreferences.Editor editor = preferences.edit(); //TODO 3:写数据 editor.putString("username","送定型"); editor.putInt("age",18); editor.putBoolean("isMan",false); editor.putFloat("price",12.4f); editor.putLong("id",5425054250l); //TODO 4:提交数据 editor.commit(); }

3.如何读取数据

步骤1:得到SharedPreferences对象 getSharedPreferences(“文件的名称”,“文件的类型”);

步骤2:读取数据 String msg = sp.getString(key,defValue);

//读数据    private void read() {
//TODO 1:得到SharedPreferences对象 //参数一 xml文件的名字 参数二 模式 MODE_PRIVATE 指定该SharedPreferences数据只能被本应用程序读写 SharedPreferences preferences = getSharedPreferences("songdingxing", MODE_PRIVATE); //TODO 2:直接读取 //参数一 键 参数二 找不到的时候给默认值 String username=preferences.getString("username",""); int age=preferences.getInt("age",0); boolean isMan=preferences.getBoolean("isMan",false); float price=preferences.getFloat("price",0.0f); long id=preferences.getLong("id",0l); Toast.makeText(this, username+":"+age+":"+isMan+":"+price+":"+id, Toast.LENGTH_SHORT).show(); }

4.记住密码功能

在这里插入图片描述

(1)xml布局

(2)Java代码

public class LoginActivity extends AppCompatActivity {
private SharedPreferences sharedPreferences; private EditText username; private EditText password; private CheckBox cb; private Button login; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); username = (EditText) findViewById(R.id.username); password = (EditText) findViewById(R.id.password); cb=(CheckBox)findViewById(R.id.cb_remember); login=(Button)findViewById(R.id.login); //TODO 读取 sharedPreferences=getSharedPreferences("1609A",MODE_PRIVATE); boolean ischeck= sharedPreferences.getBoolean("ischeck",false); if(ischeck){
//读到用户名和密码展现在页面中,复选框被勾选 String username1=sharedPreferences.getString("username",""); String password1=sharedPreferences.getString("password",""); username.setText(username1); password.setText(password1); cb.setChecked(true); } //TODO 写数据 login.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
String username2=username.getText().toString().trim(); String password2=password.getText().toString().trim(); //用户名和密码是否正确 if("songdingxing".equals(username2)&&"123456".equals(password2)){
//判断记住密码是否被选中 if(cb.isChecked()){
//存 SharedPreferences.Editor edit = sharedPreferences.edit(); edit.putBoolean("ischeck",true); edit.putString("username",username2); edit.putString("password",password2); edit.commit(); }else{
//清空 SharedPreferences.Editor edit = sharedPreferences.edit(); edit.putBoolean("ischeck",false); edit.commit(); } } } }); }}

5.作业:ListView记住上一次的位置;自动登录功能

二.文件存储:内部文件存储+外部文件存储(SD卡)(******)

1.手机内存图

在这里插入图片描述

2.SD卡介绍:

1.一般手机文件管理 根路径 /storage/emulated/0/或者/mnt/shell/emulated/0

在这里插入图片描述
2.重要代码:
(1)Environment.getExternalStorageState();// 判断SD卡是否
(2)Environment.getExternalStorageDirectory(); 获取SD卡的根目录
(3)Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 获取SD卡公开目录pictures文件夹
3.必须要添加读写SD卡的权限
在这里插入图片描述

3.代码

(1)添加读写SD卡的 权限

(2)FileUtils.java:四个方法:实现向SD卡中读写Bitmap图片和json字符串

public class FileUtils {
//方法1:向SD卡中写json串 public static void write_json(String json) {
//判断是否挂载 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//获取SD卡根路径:mnt/shell/emulated/0 File file=Environment.getExternalStorageDirectory(); FileOutputStream out=null; try {
//创建输出流 out= new FileOutputStream(new File(file,"json.txt")); out.write(json.getBytes()); } catch (FileNotFoundException e) {
e.printStackTrace(); } catch (IOException e) {
e.printStackTrace(); }finally{
if(out!=null){
try {
out.close(); } catch (IOException e) {
e.printStackTrace(); } } } } } //方法2:从SD卡中读取json串 public static String read_json() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File file = Environment.getExternalStorageDirectory(); FileInputStream inputStream = null; StringBuffer sb=new StringBuffer(); try {
inputStream=new FileInputStream(new File(file,"json.txt")); byte[] b=new byte[1024]; int len=0; while((len=inputStream.read(b))!=-1){
sb.append(new String(b,0,len)); } } catch (FileNotFoundException e) {
e.printStackTrace(); } catch (IOException e) {
e.printStackTrace(); }finally{
if(inputStream!=null){
try {
inputStream.close(); } catch (IOException e) {
e.printStackTrace(); } } } return sb.toString(); }else{
return ""; } } //方法3:从SD卡中读取一张图片 public static Bitmap read_bitmap(String filename) {
//filename图片名字 Bitmap bitmap=null; if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File file=Environment.getExternalStorageDirectory(); File file1 = new File(file, filename); //BitmapFactory可以直接根据SD卡图片路径转成一个bitmap对象 bitmap= BitmapFactory.decodeFile(file1.getAbsolutePath()); } return bitmap; } //方法4:网络下载一张图片存储到SD卡中 public static void write_bitmap(String url) {
//网址 new MyTask().execute(url); } static class MyTask extends AsyncTask
{
@Override protected String doInBackground(String... strings) {
FileOutputStream out=null; InputStream inputStream=null;//网络连接的输入流 HttpURLConnection connection=null;//向SD卡写的输出流 try {
URL url= new URL(strings[0]); connection= (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(5*1000); connection.setReadTimeout(5*1000); if (connection.getResponseCode()==200){
inputStream = connection.getInputStream(); //TODO 获取SD卡的路径 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
//是否挂载 File file = Environment.getExternalStorageDirectory(); out = new FileOutputStream(new File(file,"xiaoyueyue.jpg")); byte[] bytes=new byte[1024]; int len=0; while((len=inputStream.read(bytes))!=-1){
out.write(bytes,0,len); } } } } catch (MalformedURLException e) {
e.printStackTrace(); } catch (IOException e) {
e.printStackTrace(); }finally {
//关流 if(out!=null){
try {
out.close(); } catch (IOException e) {
e.printStackTrace(); } } if(inputStream!=null){
try {
inputStream.close(); } catch (IOException e) {
e.printStackTrace(); } } if(connection!=null){
connection.disconnect(); } } return null; } }}

三.SQLite数据库存储:(******)

四.ContentProvider存储:(******)

五.网络存储:云服务

转载地址:http://fwktn.baihongyu.com/

你可能感兴趣的文章
MySQL变量,存储过程,函数,流程控制详解(小白都能懂哦)
查看>>
9篇小白都能懂系列博客学完MySQL基础
查看>>
还在为Linux入门发愁?
查看>>
如何优雅而又不失内涵的在centos7下安装tree命令
查看>>
彻底掌握Linux文件与目录管理命令?进来看看硬核总结
查看>>
一文搞定Vim/Vi编辑器
查看>>
剑指offer之斐波那契问题(C++/Java双重实现)
查看>>
Linux网络命令
查看>>
一天教会三岁表弟HTML,你值得拥有
查看>>
CSS基础汇总
查看>>
SpringCloud服务注册与发现
查看>>
SpringCloud Stream 消息驱动
查看>>
SpringCloud Sleuth 分布式请求链路
查看>>
SpringCloud Alibaba Nacos 服务注册和配置中心
查看>>
poi读写Excel
查看>>
使用Security安全框架实现权限登录
查看>>
JDBC工具类 使用Durid连接池链接MySQL数据库
查看>>
ANSYS——模态提取方法简介
查看>>
ANSYS——初学路径之路径的定义、作用以及ansys路径模块GUI的操作解释
查看>>
ANSYS——网格划分的不同方法以及GUI模块的操作(自由网格、映射网格、扫掠、拖拉)
查看>>