Android学习之简单的数据存储

在Android中,数据存储是开发人员不可以避免的。Android为开发者提供了很多的存储方法,在前面的博客中,已经讲述了sqlite存储数据。今天将介绍用SharedPreferences来存储数据,它可以将数据保存在应用软件的私有存储区,存储区的数据只能被写入这些数据的软件读取。SharedPreference通过键值对的方法存储数据。

1.SharedPreference存储简单数据

SharedPreference可以存放简单的String、Boolean、Int等对象。

  1 <RelativeLayout xmlns:tools="http://schemas.android.com/tools"
  2     xmlns:android="http://schemas.android.com/apk/res/android"
  3     android:layout_width="match_parent"
  4     android:layout_height="match_parent"
  5     android:paddingBottom="@dimen/activity_vertical_margin"
  6     android:paddingLeft="@dimen/activity_horizontal_margin"
  7     android:paddingRight="@dimen/activity_horizontal_margin"
  8     android:paddingTop="@dimen/activity_vertical_margin"
  9     tools:context=".MainActivity" >
 10
 11     <TextView
 12         android:id="@+id/textView1"
 13         android:layout_width="wrap_content"
 14         android:layout_height="wrap_content"
 15         android:text="姓名" />
 16
 17     <EditText
 18         android:id="@+id/editename"
 19         android:layout_width="fill_parent"
 20         android:layout_height="wrap_content"
 21         android:layout_below="@id/textView1" />
 22
 23     <TextView
 24         android:id="@+id/textView2"
 25         android:layout_width="wrap_content"
 26         android:layout_height="wrap_content"
 27         android:layout_alignLeft="@+id/editename"
 28         android:layout_below="@+id/editename"
 29         android:layout_marginTop="15dp"
 30         android:text="兴趣爱好" />
 31
 32     <EditText
 33         android:id="@+id/editehoby"
 34         android:layout_width="fill_parent"
 35         android:layout_height="wrap_content"
 36         android:layout_alignLeft="@+id/textView2"
 37         android:layout_below="@+id/textView2"
 38         android:layout_marginTop="21dp"
 39         android:ems="10" >
 40
 41         <requestFocus />
 42     </EditText>
 43
 44     <CheckBox
 45         android:id="@+id/checkBox1"
 46         android:layout_width="wrap_content"
 47         android:layout_height="wrap_content"
 48         android:layout_alignLeft="@+id/editehoby"
 49         android:layout_below="@+id/editehoby"
 50         android:layout_marginTop="18dp"
 51         android:text="是否工作" />
 52
 53     <TextView
 54         android:id="@+id/textView3"
 55         android:layout_width="wrap_content"
 56         android:layout_height="wrap_content"
 57         android:layout_alignLeft="@+id/checkBox1"
 58         android:layout_below="@+id/checkBox1"
 59         android:layout_marginTop="22dp"
 60         android:text="单位性质" />
 61
 62     <RadioGroup
 63         android:id="@+id/radioGroup1"
 64         android:layout_width="wrap_content"
 65         android:layout_height="wrap_content"
 66         android:layout_alignLeft="@+id/textView3"
 67         android:layout_below="@+id/textView3"
 68         android:layout_marginTop="24dp" >
 69
 70         <RadioButton
 71             android:id="@+id/radio0"
 72             android:layout_width="wrap_content"
 73             android:layout_height="wrap_content"
 74             android:checked="true"
 75             android:text="国营" />
 76
 77         <RadioButton
 78             android:id="@+id/radio1"
 79             android:layout_width="wrap_content"
 80             android:layout_height="wrap_content"
 81             android:text="私营" />
 82
 83         <RadioButton
 84             android:id="@+id/radio2"
 85             android:layout_width="wrap_content"
 86             android:layout_height="wrap_content"
 87             android:text="股份制" />
 88     </RadioGroup>
 89
 90     <Button
 91         android:id="@+id/button1"
 92         android:layout_width="wrap_content"
 93         android:layout_height="wrap_content"
 94         android:layout_alignBottom="@+id/radioGroup1"
 95         android:layout_alignRight="@+id/editehoby"
 96         android:layout_marginBottom="26dp"
 97         android:layout_marginRight="30dp"
 98         android:text="tiao" />
 99
100 </RelativeLayout>

main.xml

这里定义了几个edittext。

 1 protected void onStop()
 2     {
 3         //获得SharedPreference对象
 4         SharedPreferences myShared=getSharedPreferences(PREFERENCE_NAME, Activity.MODE_PRIVATE);
 5         //获得editor对象
 6         SharedPreferences.Editor editor=myShared.edit();
 7         //添加需要保存的数据
 8         editor.putString("name", edname.getText().toString());
 9         editor.putString("hobby", edhoby.getText().toString());
10         editor.putBoolean("employee", cbcareer.isChecked());
11         editor.putInt("companytype", rdCompanyType.getCheckedRadioButtonId());
12         //提交数据
13         editor.commit();
14         super.onStop();
15
16     }

保存数据

这对数据的存储,并没有放在单独的事件中,而是放在onstop方法中。当activity停止的时候,会自动提交数据。

 1     protected void onCreate(Bundle savedInstanceState) {
 2         super.onCreate(savedInstanceState);
 3         setContentView(R.layout.activity_main);
 4         edname=(EditText)findViewById(R.id.editename);
 5         edhoby=(EditText)findViewById(R.id.editehoby);
 6         cbcareer=(CheckBox)findViewById(R.id.checkBox1);
 7         Button button=(Button)findViewById(R.id.button1);
 8         button.setOnClickListener(new View.OnClickListener() {
 9
10             @Override
11             public void onClick(View v) {
12                 // TODO Auto-generated method stub
13                 Intent intent=new Intent();
14                 intent.setClass(MainActivity.this, ProductSharedActivity.class);
15                 startActivity(intent);
16             }
17         });
18         rdCompanyType=(RadioGroup)findViewById(R.id.radioGroup1);
19         SharedPreferences sharedpre=getSharedPreferences(PREFERENCE_NAME, Activity.MODE_PRIVATE);
20         edname.setText(sharedpre.getString("name", ""));
21         edhoby.setText(sharedpre.getString("hobby", ""));
22         cbcareer.setChecked(sharedpre.getBoolean("employee",false));
23         rdCompanyType.check(sharedpre.getInt("companytype", -1));
24
25     }

数据读取

数据读取与保存的方法类似。

2.SharedPreference保存复杂数据

SharedPreference不仅可以保存简单的数据,而且可以保存复杂的数据对象,比如对象、图像等。保存复杂的数据类型,需要对数据进行编码。对数据的保存方法和上面的基本一致

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5
 6     <TextView
 7         android:id="@+id/textView1"
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:layout_alignParentLeft="true"
11         android:layout_alignParentTop="true"
12         android:layout_marginLeft="16dp"
13         android:layout_marginTop="15dp"
14         android:text="产品ID" />
15
16     <EditText
17         android:id="@+id/txtID"
18         android:layout_width="wrap_content"
19         android:layout_height="wrap_content"
20         android:layout_alignLeft="@+id/textView1"
21         android:layout_below="@+id/textView1"
22         android:layout_marginTop="25dp"
23         android:ems="10" >
24
25         <requestFocus />
26     </EditText>
27
28     <TextView
29         android:id="@+id/textView2"
30         android:layout_width="wrap_content"
31         android:layout_height="wrap_content"
32         android:layout_alignLeft="@+id/txtID"
33         android:layout_below="@+id/txtID"
34         android:layout_marginTop="18dp"
35         android:text="产品名称" />
36
37     <EditText
38         android:id="@+id/txtName"
39         android:layout_width="wrap_content"
40         android:layout_height="wrap_content"
41         android:layout_alignLeft="@+id/textView2"
42         android:layout_below="@+id/textView2"
43         android:layout_marginTop="32dp"
44         android:ems="10" />
45
46     <TextView
47         android:id="@+id/textView3"
48         android:layout_width="wrap_content"
49         android:layout_height="wrap_content"
50         android:layout_alignLeft="@+id/txtName"
51         android:layout_centerVertical="true"
52         android:text="产品价格" />
53
54     <EditText
55         android:id="@+id/txtprice"
56         android:layout_width="wrap_content"
57         android:layout_height="wrap_content"
58         android:layout_alignLeft="@+id/textView3"
59         android:layout_below="@+id/textView3"
60         android:layout_marginTop="28dp"
61         android:ems="10" />
62
63     <ImageView
64         android:id="@+id/imageView1"
65         android:layout_width="wrap_content"
66         android:layout_height="wrap_content"
67         android:layout_below="@+id/txtprice"
68         android:layout_toRightOf="@+id/textView3" />
69
70     <Button
71         android:id="@+id/button1"
72         android:layout_width="wrap_content"
73         android:layout_height="wrap_content"
74         android:layout_alignRight="@+id/textView3"
75         android:layout_below="@+id/imageView1"
76         android:layout_marginTop="34dp"
77         android:text="选择图像" />
78
79 </RelativeLayout>

base.xml

后台代码:

 1     protected void onStop()
 2     {
 3         Product product=new Product();
 4         /*product.setID(edid.getText().toString());
 5         product.setName(edname.getText().toString());
 6         product.setPrice(edprice.getText().toString());*/
 7         product.productname=edname.getText().toString();
 8         product.productid=edid.getText().toString();
 9         product.productprice=edprice.getText().toString();
10
11         ByteArrayOutputStream baos=new ByteArrayOutputStream();
12         ObjectOutputStream oos;
13         ((BitmapDrawable)imageview.getDrawable()).getBitmap().compress(CompressFormat.JPEG, 50, baos);
14         String imagebase=new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT));
15         try {
16             oos = new ObjectOutputStream(baos);
17             oos.writeObject(product);
18         } catch (IOException e) {
19             // TODO Auto-generated catch block
20             e.printStackTrace();
21         };
22     //获得SharedPreference对象
23         SharedPreferences myshared=getSharedPreferences("base64", Activity.MODE_PRIVATE);
24         String productbase=new String(Base64.encode(baos.toByteArray(),Base64.DEFAULT));
25         //获得editor对象
26         SharedPreferences.Editor editor=myshared.edit();
27         //添加需要存储的数据
28         editor.putString("product", productbase);
29         editor.putString("productimage", imagebase);
30         //提交保存数据
31         editor.commit();
32
33         super.onStop();
34     }

数据保存

这里需要保存的数据都经过了base64的编码处理,在编码之前需要将其转为流的形式。

Android学习之简单的数据存储

时间: 2024-10-12 23:18:09

Android学习之简单的数据存储的相关文章

Android学习笔记—第八章 数据存储

第八章 数据存储 数据存储方式 Internal Storage 内部存储 External Storage 外部存储 SQLite DataBase 数据库存储 Http 网络存储 Shared Prefrences 参数共享 存储位置:data/data/包名/shared_prefs/MainAcitivy.xml 格式:xml 保存数据: //获取Shared Prefrences类型对象 SharedPrefrences sp = getSharedPrefrences("xxx&qu

Android基础之十四数据存储 之 SQLite数据库详解

Android基础之十四数据存储 之 SQLite数据库详解 SQLite 是一款 轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百 K 的内存就足够了,因而特别适合在移动设备上使用. SQLite 不仅支持标准的 SQL 语法,还遵循了数据库的 ACID( 原子性(Atomicity) .一致性(Consistency) . 隔离性(Isolation) . 持久性(Durability))事务,所以只要你以前使用过其他的关系型数据库,就可以很快地上手 SQLite.而

Android系统的五种数据存储形式(一)

Android系统有五种数据存储形式,分别是文件存储.SP存储.数据库存储.contentprovider 内容提供者.网络存储.其中,前四个是本地存储.存储的类型包括简单文本.窗口状态存储.音频视频数据.XML注册文件的各种数据.各种存储形式的特点不尽相同,因此对于不同的数据类型有着固定的存储形式,本文为演示方便给出的案例基本相同,都是是采用账号登录来演示数据存储,保存账号和密码信息,下次登录时记住账号和密码.重在说明各种存储形式的原理. 文件存储: 以I/O流的形式把数据存入手机内存或SD卡

Android系统的五种数据存储形式(二)

之前介绍了Android系统下三种数据存储形式,今天补充介绍另外两种,分别是内容提供者和网络存储.有些人可能认为内存提供者和网络存储更偏向于对数据的操作而不是数据的存储,但这两种方式确实与数据有关,所以这里还是将这两种形式简要的说明一下. Content Provider: Content Provider,中文名是内存提供者,Android四大组件之一,内容提供者是应用程序之间共享数据的接口,以数据库形式存入手机内存,可以共享自己的数据给其他应用使用.之所以需要设计一个单独的控件来操作数据,是

Android应用之——不要将数据存储在Application类中

前言:最近在开发中发现了一个比较严重的问题,当我们将应用按home键放入后台运行,一段时间后,当我们再次打开应用的时候,十有八九会出现一个NullPointException的空指针异常,根据logcat的日志,就会定位到一个去全局性到变量去,这是什么原因呢?原来,是因为我们我们将很多数据放入了application中作为全局变量,导致了问题的产生,下面来说下为什么不能将数据放在application中. 一.application类的简介 Application和Activity,Servic

iOS 学习笔记——0005(数据存储)

先发一个练手的小demo,自己写的简略通讯录,已上传至github https://github.com/liaoshaolim/addressBook 1.NSKeyedArchiver:(归档) 这里用一个添加联系人的例子来说明: 注意:归档形式保存数据,需要该对象遵守NSCoding协议,而且对应的必须提供encodeWithCoder和initWithCoder方法 因为归档是一次性的,解压也是一次性的,所以小量的ok,如果量大的话,改一个小地方就要归档或解压全部,效率会比较低 //用一

android SharedPreferences 简单的数据存储

SharedPreferences 简单数据存储,我的理解是类似于windows的ini文件 可以存储很多种类型,写了个小例子 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLa

Android开发7:简单的数据存储(使?SharedPreferences)和文件操作

前言 啦啦啦~大家好,又见面啦~ 本篇博文讲和大家一起完成一个需要注册.登录的备忘录的,一起学习 SharedPreferences 的基本使用,学习 Android 中常见的文件操作方法,复习 Android 界面编程. 直接进入正题~ 基础知识 1.SharedPreferences 的使用 使用SharedPreferences储存用户名和密码,SharedPreferences是直接处理xml文件,不需要做字符串分割,存储效率会比使用内部存储,和外部存储存储用户名和密码高. (1) Sh

android学习经常使用的数据文件夹

android工程实践 1.仿360一键清理实现(一) "一键清理"是一个桌面图标,点击图标后,显示一个视图.进行清理动画.之后显示清理了几个进程,释放了多少M内存.点击"设置过滤名单"启动另外一个Activity编辑过滤名单 1.仿360一键清理实现(二) "一键清理"是一个桌面图标,点击图标后,显示一个视图,进行清理动画,之后显示清理了几个进程,释放了多少M内存.点击"设置过滤名单"启动另外一个Activity编辑过滤名单