android 本地存储的几种方式
来源:互联网 发布:北京网络策划公司 编辑:程序博客网 时间:2024/06/08 18:39
身为一个android码农,我认为最常见的的两种数据存储:本地存储和网络存储
那么本地存储有哪些方式呢?分别如何实现呢?下面跟大家细说android的几种存储方式和实现方法
1 使用SharedPreferences存储数据。
2 文件存储数据
3 SQLite数据库存储数据
一:
实现SharedPreferences存储的步骤如下:
一、根据Context获取SharedPreferences对象
public class MainActivity extends Activity { 二、利用edit()方法获取Editor对象。
三、通过Editor对象存储key-value键值对数据。
四、通过commit()方法提交数据。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取SharedPreferences对象
Context ctx = MainActivity.this;
SharedPreferences sp = ctx.getSharedPreferences("data", MODE_PRIVATE);
//存入数据
Editor editor = sp.edit();
editor.putString("name", "张三");
editor.putString("sex", "男");
editor.putString("old","25");
editor.commit();
//取值
Sting name= sp.getString("name","");//后面的参数是未取到值得时候返回的值
Sting name= sp.getString("sex","");
Sting name= sp.getString("old","");
Log.e("text:","name:"+name+"sex"+sex+"old"+old);
}
}
第二种: 文件存储数据
并不是很常见哦
public void down()
{
try {
FileOutputStream outStream=this.openFileOutput("data.txt",Context.MODE_WORLD_READABLE);
outStream.write(text.getText().toString().getBytes());
outStream.close();
Toast.makeText(MyActivity.this,"Saved",Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
}
catch (IOException e){
}
}
Context.MODE_WORLD_READABLE为默认模式,该模式是只有当前应该可以读取该文件,如果想让其他应用需要读取,可以把模式换成Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE
读取文件的方法
public void loading()
{
try {
FileInputStream inStream=this.openFileInput("data.txt");
ByteArrayOutputStream stream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=-1;
while((length=inStream.read(buffer))!=-1) {
stream.write(buffer,0,length);
}
stream.close();
inStream.close();
Toast.makeText(MyActivity.this,stream.toString(),Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
}
catch (IOException e){
}
}
因为这个没有写入SD卡,所以比较大的文件建议写入SD卡。
加上权限
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
File sdCardDir = new File("/sdcard"); //获取SDCard目录
File saveFile = new File(sdCardDir, "data.txt");
//上面两句代码可以合成一句:
File saveFile = new File("/sdcard/a.txt");
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("test".getBytes());
outStream.close();
三:SQLite数据库存储数据
这种也比较常见,个人感觉也比较方便哦
public class MySqliteOpenHelper extends SQLiteOpenHelper { //构造方法 //第一个参数是上下文的意思 //第二个参数是数据库的名称 //第三个参数是游标工厂,一般使用null就可以 //第四个参数是版本号 public MySqliteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } //数据库没有创建才回调这个方法 //用于数据库的表的创建 @Override public void onCreate(SQLiteDatabase db) { //创建数据库的一个使用的表 db.execSQL(SQlite.CREATE_TABLE); } //版本变化时回调的方法,要求新版本大于旧版本呢! @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //删除数据库的表,再创建数据库的表 db.execSQL(SQlite.DELETE_TABLE); onCreate(db); } //定义一个数据库的基本信息,包括一些基本的使用语句 static class SQlite { public static final String DB_NAME = "Test.db";//数据库名称 public static final String TABLE_NAME = "userInfo";//要操作的表的名称 //表格里面的数据 public static final String ID = "_id";//用户的ID public static final String USER_TIME = "time";//用户的姓名 public static final String USER_CONTEXT = "context";//用户的年龄 public static final String USER_NUMBER = "number";//用户的性别 //创建表格使用的SQL语句 public static final String CREATE_TABLE = "create table " + TABLE_NAME + " (" + ID + " integer primary key autoincrement," + USER_CONTEXT + " text not null," + USER_NUMBER + " text not null," + USER_TIME + " text not null"+ ")"; //删除表格使用的语句 public static final String DELETE_TABLE = "drop table if exists " + TABLE_NAME; }}
在Activity中MySqliteOpenHelper helper = new MySqliteOpenHelper(context, MySqliteOpenHelper.SQlite.DB_NAME, null, 1);//获得数据库对象helper.get...//可读,并且可写---的数据库: 磁盘满的情况,写不进去,不写了,一般情况使用这个*//*db = helper.getReadableDatabase();
这是查询出值
private void select() { list.clear(); //先清除页面上的数据 //再加载数据库的数据 //这里查询所有的数据,只需要一个表名就可以了,后面的条件可以不写,获得的是一个结果集 Cursor cursor = db.query(MySqliteOpenHelper.SQlite.TABLE_NAME, null, null, null, null, null, null); //结果集指向的表头前面.moveToNext()来指向下一个结果 while (cursor.moveToNext()) { //获取结果集里面的数据 //cursor.getColumnIndex()获取列名所在的列号 infobean phone = new infobean(); //这里通过列号来获取数据 phone.setTime(cursor.getString(cursor.getColumnIndex(MySqliteOpenHelper.SQlite.USER_TIME))); phone.setContext(cursor.getString(cursor.getColumnIndex(MySqliteOpenHelper.SQlite.USER_CONTEXT))); phone.setNumber(cursor.getString(cursor.getColumnIndex(MySqliteOpenHelper.SQlite.USER_NUMBER))); //把找到的数据添加到List集合中 list.add(phone); } }
SQLlist 这个存储方法还挺常用,这都是从我代码中拷出来的,大家需要用的时候把列明改下就OK了
要下班了,就不补充了啊
1 0
- android 本地存储的几种方式
- Android上常用的几种本地数据存储方式:1、使用SharedPreferences存储数据
- Android上常用的几种本地数据存储方式:2、文件存储数据
- Android上常用的几种本地数据存储方式:3、SQLite数据库存储数据
- Andriod 本地存储数据的几种方式
- android数据存储的几种方式
- android 数据存储的几种方式
- android 几种持久性的存储方式
- Android数据存储的几种方式
- android数据存储的几种方式
- android数据的几种存储方式
- android 数据存储的几种方式
- Android数据存储的几种方式
- Android存储数据的几种方式
- Android学习之Android本地存储的五种方式
- iOS开发中本地几种存储方式
- android系列:数据存储的几种方式
- android 数据存储之SharePreference 的几种方式
- 京东2016实习生招聘笔试真题-技术岗位选择题A
- hdoj 2199二分查找
- 如何在zigbee的应用层修改PANID?
- caffe loss一直nan什么情况
- Climbing Worm
- android 本地存储的几种方式
- 音频 图像 视频等数据的压缩与存储格式
- 字符流_FileWriter类
- 操作系统:进程的状态
- IDEA搭建Web项目
- 深度学习学习笔记——(1)神经网络
- 【LeetCode】412. Fizz Buzz
- git使用记录
- 【Java语言】Ja.1.3--浅谈多线程机制(三)之互斥与同步