记账本小程序7天开发记录(第五天)
开发家庭记账本小程序必然会用到数据的存储,所以今天主要学习Android开发的数据存储。
##Android开发的数据存储
- 文件存储
- 应用程序只可以把数据存储在自己私有的文件夹里, data/data/<包名>/文件名...
- 上下文:应用程序运行的环境
- api获取目标目录:
- this.getFileDir()===>data/data/<包名>/files //保存重要的配置信息
- this.getCacheDir() ===>data/data/<包名>/cache //缓存目录
package com.fmd.qqlander;import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader;import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast;public class MainActivity extends Activity {private static String MainActivity;private static final String TAG = MainActivity;private EditText et_qq;private EditText et_password;private CheckBox cb_remember;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_qq = findViewById(R.id.et_qq);et_password = findViewById(R.id.et_password);cb_remember = findViewById(R.id.cb_remember);//获取原来在文件中保存的QQ号码和密码,回到界面上。//File file = new File("data/data/com.fmd.qqlander/info.txt");//getFilesDir() === /data/data/<当前应用程序的包名>/filesFile file = new File(this.getFilesDir(),"info.txt");if(file.exists()&&file.length()>0) {try {FileInputStream fis = new FileInputStream(file);BufferedReader br = new BufferedReader(new InputStreamReader(fis));String info = br.readLine();String qq = info.split("##")[0];String pwd = info.split("##")[1];et_qq.setText(qq);et_password.setText(pwd);} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}}}public void login(View view) {String qq = et_qq.getText().toString().trim();String pwd = et_password.getText().toString().trim();if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd)){Toast.makeText(this, "用户名或密码不能为空", 0).show();return;}if(cb_remember.isChecked()) {//CheckBox被勾选时记住密码Log.i(TAG,"记住密码");}else {//不需要记住密码Log.i(TAG,"不需要记住密码");}try {//File file = new File("data/data/com.fmd.qqlander/info.txt");File file = new File(this.getFilesDir(),"info.txt");FileOutputStream fos = new FileOutputStream(file);fos.write((qq+"##"+pwd).getBytes());fos.close();Toast.makeText(this, "数据保存成功", 0).show();} catch (FileNotFoundException e) {// TODO Auto-generated catch block e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();Toast.makeText(this, "数据保存异常", 0).show();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);} }
- sd卡存储
- 应用程序可以把数据存储在外存储卡
- 需要声明权限
- Environment.getExternalStorageDirectory() //获取外部存储卡的目录
- 需要注意检查sd卡是否可用,检查sd卡的剩余空间
File file = new File(Environment.getExternalStorageDirectory(),"info.txt");if(file.exists()&&file.length()>0) {try {FileInputStream fis = new FileInputStream(file);BufferedReader br = new BufferedReader(new InputStreamReader(fis));String info = br.readLine();String qq = info.split("##")[0];String pwd = info.split("##")[1];et_qq.setText(qq);et_password.setText(pwd);} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}
- 文件权限
- 应用程序在data/data/包名/目录下创建的文件都是私有的,其他应用程序是不可以访问的。
- 默认生成的文件都是私有的
- 如何生成公开权限的文件
//生成公开权限的文件public void getpublicFile(View view) {try {FileOutputStream fos = openFileOutput("public.txt",Context.MODE_WORLD_READABLE+Context.MODE_WORLD_READABLE);fos.write("private".getBytes());fos.close();} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}}
- 更改文件权限的方法
- chmod:change mode Linux下更改文件访问的权限
- 参数 sharedperference
- 声明 sharedperference //sp = this.getSharedPreferences("config", 0);
- 获取到一个参数
- 获取编辑器 //Editor editor = sp.edit();
- editor.putString(key,value); // editor.putInt(); // editor.putDouble();
- editor.commit();保存数据完毕,必须记得调用commit的方法
- 获取数据 sp.getString(key,dafvalue); // sp.getInt(); // sp.getDouble();
public class MainActivity extends Activity {private static String MainActivity;private static final String TAG = MainActivity;private EditText et_qq;private EditText et_password;private CheckBox cb_remember;//1.声明spprivate SharedPreferences sp;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_qq = findViewById(R.id.et_qq);et_password = findViewById(R.id.et_password);cb_remember = findViewById(R.id.cb_remember);//2.获取到一个参数sp = this.getSharedPreferences("config", 0);String qq = sp.getString("qq", ""); String pwd = sp.getString("pwd", "");et_qq.setText(qq);et_password.setText(pwd);}public void login(View view) {String qq = et_qq.getText().toString().trim();String pwd = et_password.getText().toString().trim();if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd)){Toast.makeText(this, "用户名或密码不能为空", 0).show();return;}if(cb_remember.isChecked()) {//CheckBox被勾选时记住密码Log.i(TAG,"记住密码");//3.得到sp文件的编辑器Editor editor = sp.edit();editor.putString("qq",qq);editor.putString("pwd",pwd);//4.保存数据完毕,必须记得调用commit的方法 editor.commit();}else {//不需要记住密码Log.i(TAG,"不需要记住密码");}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
转载于:https://www.cnblogs.com/fuheishi/p/10419842.html
记账本小程序7天开发记录(第五天)相关推荐
- 记账本小程序7天开发记录(第二天)
循序渐进,为了完全掌握应用程序的开发过程,专门拿出一些时间来尝试开发一键SOS应用小程序来了解应用程序开发流程. SOS界面当然不需要其他繁琐的东西,只需要一键SOS,只需要一个醒目的SOS按钮就OK ...
- EasyAR+微信小程序识别图片开发记录
EasyAR+微信小程序识别图片开发记录 所需数据 业务关系 示例代码 总结 所需数据 //小程序>appid AppId:***** //EasyAR> ApiKey:**** APIS ...
- 微信小程序组件库开发记录
微信小程序组件库开发记录 背景 前言 技术选型 环境搭建 安装 gulp 将`scss`编译为`wxss` 压缩`wxml`,`js`,`json`文件和图片 拷贝文件到另一个目录 删除目录 整合 创 ...
- 微信小程序java后端开发记录(三):模板消息推送
·模板消息推送 1.1推送参数dto: 按照文档逐层次封装请求参数. 这些参数 /*** @author hanyy* @Description: 微信小程序模板消息推送参数* @date 2019/ ...
- (附源码)记账微信小程序 毕业设计180815
记账微信小程序 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,记账微信小程序被用户普遍使用, ...
- (附源码)小程序记账微信小程序 毕业设计180815
记账微信小程序 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,记账微信小程序被用户普遍使用, ...
- 小程序+spring boot记账微信小程序 毕业设计-附源码180815
记账微信小程序 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,记账微信小程序被用户普遍使用 ...
- php简单记账本_介绍你3个记账本小程序,让你花钱有规划
随着科技的发展,我们越来越倾向与手机支付了,但是这样我们钱一下子过去了,也没去规划,总是月光族,那么下面小编介绍你3个记账本小程序,让你记录账单,规划好如何花钱. 1.家庭小记账本 家庭小记账本是一款 ...
- 微信小程序应用号开发教程!博卡君通宵吐血赶稿
微信应用号(微信公众平台小程序,「应用号」的新称呼)终于来了!开源中国社区的博卡君通宵吐血赶稿写出的微信公众平台应用号开发教程!大家赶紧来学习一下吧 对了,昨天晚间微信小程序开发文档官方版发布了 微信 ...
最新文章
- 如何让AI教机器自己玩俄罗斯方块?
- 【端口号和服务漫谈】
- ASP.NET 快乐建站系列–2. Rad Controls 简介
- SQLServer数据的基本操作:简单的增、删、改、查
- 【经验】新人学习写程序的第一道坎
- (转)创建X509证书,并获取证书密钥的一点研究
- 【渝粤题库】陕西师范大学201721 数学教育学 作业(专升本)
- linux 进程killed_linux下运行Gaussian09进程被killed
- 怎么在Linux上抓包分析
- BLDC无刷直流电机驱动电路-硬石电子
- 美容美发门店预约下单小程序开发制作
- 不歧视双非的计算机院校,这30所重点院校不歧视“双非”,公平竞争录取,爱了爱了!...
- 动态像素绘画——StarDust
- 我如何在GitHub Project上获得1,000个星星,以及在此过程中学到的教训
- URL锚点HTML定位技术机制、应用与问题
- 【数字图像处理】Anaconda下安装OpenCV
- 经历过黑暗才更渴望黎明_黑暗的图案,你如何操纵以给予更多
- oracle报错1455,oracle 1455 错误解决办法
- ArcMap中Shapefile和dBASE文件的创建与管理
- 音效工具Boom 3D