本文共 9749 字,大约阅读时间需要 32 分钟。
保存少量的数据,且这些数据的格式非常简单。 存储5种原始数据类型: boolean, float, int, long, String
比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),记住密码功能,音乐播放器播放模式。
存哪了: /data/data/应用程序包名/shared_prefs/Xxx.xml文件,以Key-Value的格式存储
技能要点: (1)如何存储数据 (2)如何获取数据
(1).Context.MODE_PRIVATE:指定该SharedPreferences数据只能被应用程序读写 (2)MODE_APPEND:检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 (3).Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他 应用程序读,但不能写。 (4).Context,MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序写,但不能读。
步骤1
:得到SharedPreferences对象 getSharedPreferences(“文件的名称”,“文件的类型”);步骤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(); }
步骤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(); }
(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(); } } } }); }}
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卡的权限(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; } }}
转载地址:http://fwktn.baihongyu.com/