Android中的数据存储方式
来源:互联网 发布:c 手机软件编程 编辑:程序博客网 时间:2024/05/16 05:33
第一种:
保存在应用程序私有的文件夹下---- 只有 应用程序自己可以访问
第二种:
保存到公共的sd 卡上, --------- 其他的应用程序也可以访问
第三种:
使用sharedPreference去保存----- 只有 应用 程序自己可以访问
第四种:
使用 xml 文件去保存
第五种:
1、调用Environment的getExternalStorageState()方法判断手机上是否插了sd卡,且应用程序具有读写SD卡的权限,如下代码将返回true
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
2、调用Environment.getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录,或者使用"/mnt/sdcard/"目录
3、使用IO流操作SD卡上的文件
SharedPreference是一种轻型的数据存储方式,实际上是基于XML文件存储的“key-value”键值对数据。通常用来存储程序的一些配置信息。其存储在“data/data/程序名/shared_prefs目录下。SharedPreference本身只能获取数据,不支持存储和修改。存储和修改要通过Editor对象来实现。
1、根据Context的getSharedPrerences(key, [模式])方法获取SharedPreference对象;
2、利用SharedPreference的editor()方法获取Editor对象;
3、通过Editor的putXXX()方法,将键值对存储数据;
4、通过Editor的commit()或者apply()方法将数据提交到SharedPreference内。
QLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧,具体的可以上网查一下。
Android中集成了SQLite数据库,我们在使用的时候只需要继承SQLiteOpenHelper这个类即可。
保存在应用程序私有的文件夹下---- 只有 应用程序自己可以访问
第二种:
保存到公共的sd 卡上, --------- 其他的应用程序也可以访问
第三种:
使用sharedPreference去保存----- 只有 应用 程序自己可以访问
第四种:
使用 xml 文件去保存
第五种:
使用数据库去保存
第一种:保存在应用程序的私有文件夹下
public class MainActivity extends Activity {EditText ed_number;EditText ed_pwd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed_number = (EditText) findViewById(R.id.ed_number); ed_pwd = (EditText) findViewById(R.id.ed_pwd); //回显,也就是自动显示 try { File file = new File(getCacheDir(), "info.txt");BufferedReader br = new BufferedReader(new FileReader(file));String value = br.readLine();String number = value.split("#")[0];String pwd = value.split("#")[1];ed_number.setText(number);ed_pwd.setText(pwd);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} } public void login(View v) throws Exception { String number = ed_number.getText().toString().trim(); String pwd = ed_pwd.getText().toString().trim(); if(TextUtils.isEmpty(number) || TextUtils.isEmpty(pwd)) { Toast.makeText(this, "对不起,不能为空", 0).show(); } /*第一步:得到应用程序的私有文件夹吗,共有三种方法*/ //第一种:得到应用程序私有文件的方法 File file1 = new File("/data/data/com.itheima.qqlogin/info.txt"); //第二种:保存存到应用程序的 /data/data/com.itheima.qqlogin/files文件夹里了 File file2 = new File(getFilesDir(),"info.txt"); //第三种:保存 到 应用程序的 /data/data/com.itheima.qqlogin/cache文件夹里了 File file3 = new File(getCacheDir(), "info.txt"); /*第二步:创建流文件*/ String value = number + "#" + pwd; OutputStream out = new FileOutputStream(file3); /*第三步:写入*/ out.write(value.getBytes()); out.close(); Toast.makeText(this, "保存成功", 0).show(); }}第二种:保存在sdcard中
1、调用Environment的getExternalStorageState()方法判断手机上是否插了sd卡,且应用程序具有读写SD卡的权限,如下代码将返回true
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
2、调用Environment.getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录,或者使用"/mnt/sdcard/"目录
3、使用IO流操作SD卡上的文件
public class MainActivity extends Activity {EditText ed_number;EditText ed_pwd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed_number = (EditText) findViewById(R.id.ed_number); ed_pwd = (EditText) findViewById(R.id.ed_pwd); } public void login(View v) throws Exception { String number = ed_number.getText().toString().trim(); String pwd = ed_pwd.getText().toString().trim(); if(TextUtils.isEmpty(number) || TextUtils.isEmpty(pwd)) { Toast.makeText(this, "对不起,不能为空", 0).show(); } /*第一步:判断sd 卡是否 可用, 如果 sd 卡不可用, 应该给用户提示 */// if(!Environment.getExternalStorageState().equals("mounted")){ if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { Toast.makeText(this, "对不起, sd 卡 不可用, 请检查sd 卡的状态 ", 0).show();//如果进来, 则需要给用户提示 sd 卡不可用 return; } /*第二步:还会检查 sd 卡的 可用 是否够。内存 */ long freeSpace = Environment.getExternalStorageDirectory().getFreeSpace();String size = Formatter.formatFileSize(this, freeSpace);Toast.makeText(this, "可用存储 空间 是 : " + size, 0).show();/*第三步:获得sd卡的位置并保存*/File file = new File(Environment.getExternalStorageDirectory(), "info.txt");String value = number+"#"+pwd;OutputStream out = new FileOutputStream(file);out.write(value.getBytes());out.close(); Toast.makeText(this, "保存成功", 0).show(); } }第三种:保存在sharedPreference
SharedPreference是一种轻型的数据存储方式,实际上是基于XML文件存储的“key-value”键值对数据。通常用来存储程序的一些配置信息。其存储在“data/data/程序名/shared_prefs目录下。SharedPreference本身只能获取数据,不支持存储和修改。存储和修改要通过Editor对象来实现。
1、根据Context的getSharedPrerences(key, [模式])方法获取SharedPreference对象;
2、利用SharedPreference的editor()方法获取Editor对象;
3、通过Editor的putXXX()方法,将键值对存储数据;
4、通过Editor的commit()或者apply()方法将数据提交到SharedPreference内。
public class MainActivity extends Activity {EditText ed_number;EditText ed_pwd;SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed_number = (EditText) findViewById(R.id.ed_number); ed_pwd = (EditText) findViewById(R.id.ed_pwd); //将号码和密码回显 sp = getSharedPreferences("config", Context.MODE_PRIVATE); String number = sp.getString("number", ""); String pwd = sp.getString("pwd", ""); ed_number.setText(number); ed_pwd.setText(pwd); } public void login(View v) throws Exception { String number = ed_number.getText().toString().trim(); String pwd = ed_pwd.getText().toString().trim(); if(TextUtils.isEmpty(number) || TextUtils.isEmpty(pwd)) { Toast.makeText(this, "对不起,不能为空", 0).show(); } /*第一步:获得共享文件中,保存在应用程序的私有文件夹下*/ //sp = getSharedPreferences("config", Context.MODE_PRIVATE); /*第二步:获得共享文件的编辑器*/ Editor editor = sp.edit(); editor.putString("number", number); editor.putString("pwd", pwd); /*第三步:提交, 那么数据就会 由 内存中 写到 xml 文件中去了*/ //editor.commit();//线程不安全 editor.apply();//线程安全 Toast.makeText(this, "保存成功", 0).show(); }}第四种:使用 xml 文件去保存
public class MainActivity extends Activity {private EditText ed_name;private EditText ed_number;private RadioGroup rgb;private TextView tv_info; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed_name = (EditText) findViewById(R.id.ed_name); ed_number = (EditText) findViewById(R.id.ed_number); rgb = (RadioGroup) findViewById(R.id.rgb); tv_info = (TextView) findViewById(R.id.tv_info); } //保存学生的信息 public void save(View v) { String name = ed_name.getText().toString().trim(); String number = ed_number.getText().toString().trim(); if(TextUtils.isEmpty(name) || TextUtils.isEmpty(number)) { Toast.makeText(this, "对不起, 学生姓名和 学号不能为空", 0).show();return; }/*zs.xml小作业: 保存学生的信息的时候, 保存下学生的 城市 city 信息 <?xml version="1.0" standalone="yes" encoding="gbk"?><student city="shenzhen"><name>张三</name><number>20150832</number><sex>male</sex></student>lisi.xml<student city="guangzhou"><name>李四</name><number>20150832</number><sex>male</sex></student>pull解析 器的一套 api 包括 : serializer , 以及 pullparser android中 已经集成 了pull 解析器 所 有的 api , 所以这里 可以直接用了. * */ String sex = "male"; int id = rgb.getCheckedRadioButtonId(); if(id == R.id.male) { sex = "male"; }else { sex = "female"; } try {File file = new File(getFilesDir(), name + ".xml");//1.得到解析器XmlSerializer newSerializer = Xml.newSerializer();//2.创建流并写入xml解析器中OutputStream out = new FileOutputStream(file);newSerializer.setOutput(out, "utf-8");//3.开始解析//3.1设置xml头部newSerializer.startDocument("utf-8", true);//3.2 设置键newSerializer.startTag(null, "student");//3.3 设置值newSerializer.startTag(null, "name");newSerializer.text(name);newSerializer.endTag(null, "name");newSerializer.startTag(null, "number");newSerializer.text(number);newSerializer.endTag(null, "number");newSerializer.startTag(null, "sex");newSerializer.text(sex);newSerializer.endTag(null, "sex");newSerializer.endTag(null, "student");newSerializer.endDocument();} catch (Exception e) {// TODO: handle exception} } public void query(View v) { String name = ed_name.getText().toString().trim();if(TextUtils.isEmpty(name)){Toast.makeText(this, "要查询的学生的姓名不能为空 ", 0).show();return;}File file = new File(getFilesDir(), name+".xml");if(file==null||file.length()<=0){Toast.makeText(this, "要查询的学生的姓名 不存在 ", 0).show();return;}//则说明 学生的信息 肯定存在//就需要去解析xml 文件了 try {XmlPullParser parser = Xml.newPullParser();InputStream in = new FileInputStream(file);parser.setInput(in, "UTF-8");int type = parser.getEventType();/* * <student city="guangzhou"><name>李四</name><number>20150832</number><sex>male</sex></student> * */String cityValue = null;String nameValue = null;String number = null;String sex = null;while(type!=XmlPullParser.END_DOCUMENT){if(XmlPullParser.START_TAG==type){if("student".equals(parser.getName())){int count = parser.getAttributeCount();if(count>0){cityValue = parser.getAttributeValue(0);}}else if("name".equals(parser.getName())){nameValue = parser.nextText();}else if("number".equals(parser.getName())){number = parser.nextText();}else if("sex".equals(parser.getName())){sex = parser.nextText();}}type=parser.next();}tv_info.setText(nameValue+"\n"+number +"\n"+sex+"\n"+cityValue);} catch (Exception e) {e.printStackTrace();Toast.makeText(this, "解析失败 ", 0).show();} }}第五种:使用数据库去保存
QLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧,具体的可以上网查一下。
Android中集成了SQLite数据库,我们在使用的时候只需要继承SQLiteOpenHelper这个类即可。
package com.heima.studentsystem.db;public class StudentDbOpenHelper extends SQLiteOpenHelper {public StudentDbOpenHelper(Context context) {super(context, "student.db", null, 1);// TODO Auto-generated constructor stub}@Override// sqlite数据库 最终在 存储数据时, 实际上都是 字符串. public void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL("create table students (_id integer primary key autoincrement, name varchar(30), sex varchar(10))");}@Override//更新public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}package com.heima.studentsystem.db.dao;public class StudentDao {StudentDbOpenHelper helper;public StudentDao(Context context) {helper = new StudentDbOpenHelper(context);}//如果做 增删改 操作, 那么 就 getWritableDatabase .,表示 获得一个 可写的数据库 public void insert(String name, String sex) {SQLiteDatabase db = helper.getWritableDatabase();db.execSQL("insert into students values(null,?,?)", new Object[]{name,sex});db.close();}public void delete(String name){SQLiteDatabase db = helper.getWritableDatabase();//delete from student where name=?db.execSQL("delete from students where name=?",new Object[]{name});db.close();}public void update(String name, String sex){SQLiteDatabase db = helper.getWritableDatabase();// update students set sex=? where name=?;db.execSQL("update students set sex=? where name=?", new Object[]{sex,name});db.close();}public String findOne(String name){//获得一个可读的数据库 SQLiteDatabase db = helper.getReadableDatabase();//db.execSQL("select * from students where name=?", new Object[]{name});//执行 查询 语句 Cursor cursor = db.rawQuery("select sex from students where name=?",new String[]{name});String sex = null;if(cursor.moveToNext()){sex = cursor.getString(0);}return sex;}public List<Student> getAll() {SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from students", null);List<Student> list = new ArrayList<Student>();Student student = null;while(cursor.moveToNext()) {int id = cursor.getInt(0);String name = cursor.getString(1);String sex = cursor.getString(2);student = new Student(id, name, sex);list.add(student);}return list;}}package com.heima.studentsystem;public class MainActivity extends Activity {private EditText ed_name;private RadioGroup rgb;private LinearLayout ll_layout;StudentDao sdao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed_name = (EditText) findViewById(R.id.ed_name); rgb = (RadioGroup) findViewById(R.id.rgb); ll_layout = (LinearLayout) findViewById(R.id.ll_layout); sdao = new StudentDao(this); } //保存学生的信息 public void save(View v) { String name = ed_name.getText().toString().trim(); if(TextUtils.isEmpty(name)) { Toast.makeText(this, "对不起, 学生姓名和 学号不能为空", 0).show();return; } String sex ="male";//拿到 被 选择的 radio 单选项 int id = rgb.getCheckedRadioButtonId();if(id==R.id.male){sex ="male";}else {sex="female";}//调用 dao 存学生的信息sdao.insert(name, sex); Toast.makeText(this, "保存成功", 0).show(); } public void display(View v) { List<Student> list = sdao.getAll(); ll_layout.removeAllViews(); for (Student student : list) {TextView tv = new TextView(this);tv.setText(student.toString());ll_layout.addView(tv);} }}
阅读全文
0 0
- Android中的数据存储方式
- Android中的数据存储方式
- Android中的数据存储方式
- Android中的数据存储方式
- Android中的数据存储方式
- Android中的SharedPreferences存储数据方式
- Android中的文件存储数据方式
- Android中的文件存储数据方式
- Android中的文件存储数据方式 .
- Android中的SharedPreferences存储数据方式 .
- Android中的SharedPreferences存储数据方式
- Android中的文件存储数据方式
- Android中的SharedPreferences存储数据方式
- 【转】Android中的SharedPreferences存储数据方式
- Android中的SharedPreferences存储数据方式
- Android中的SharedPreferences存储数据方式
- Android中的SharedPreferences存储数据方式
- Android中的SharedPreferences存储数据方式
- 【头条】西安全球程序员节:码动的是未来,舞动的是精神和人才
- 1 linux 安装
- hibernate映射配置文件分析(二)
- NVIDIA DLI 深度学习入门培训 | 来自南京晓庄学院现场报道
- Python三维绘图:马鞍面
- Android中的数据存储方式
- Mapreduce的工作原理
- 【sort函数】的基本使用方法
- 定语从句
- 没有找到libmysql.dll,因此这个应用程序未能启动
- Android调用js方法以及js调用Android方法
- 初识Java并发
- js中当值发生变化/键盘摁下等事件的不同之处
- spring @Transactional注解参数详解