首页 > 代码库 > Android学习之简单的数据存储
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>
这里定义了几个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 @Override11 public void onClick(View v) {12 // TODO Auto-generated method stub13 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 <EditText17 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 <TextView29 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 <EditText38 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 <TextView47 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 <EditText55 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 <ImageView64 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 <Button71 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>
后台代码:
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 block20 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的编码处理,在编码之前需要将其转为流的形式。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。