Android数据存储方式(二)SharedPreferences(偏好参数保存)

分类: Android   2894人阅读  评论(0)  收藏  举报

本篇来介绍一下Android数据存储的第二中方式:SharedPreferences,这种方式在保存软件的各项参数时应用最广泛,一般采用.xml文件来进行存放。

实现的简单界面如下:



在Activity的子类中,我们可以通过两种方式来获取

第一种是:

   getPreferences(MODE_PRIVATE);  //这种方式默认采用所在的类名作为xml文件的名称

第二种是:

getSharedPreferences("preferencesFile", Context.MODE_PRIVATE); //我们可以指定参数保存文件的文件名称

本篇中采用第二种方式在service对象中指定保存的文件名称。


工程目录结构:



源代码:

main.xml

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="@string/username" />  
  11.     <EditText   
  12.         android:id="@+id/name"  
  13.         android:layout_width="fill_parent"  
  14.         android:singleLine="true"  
  15.         android:layout_height="wrap_content"/>  
  16.     <TextView  
  17.         android:layout_width="fill_parent"  
  18.         android:layout_height="wrap_content"  
  19.         android:text="@string/age" />  
  20.     <EditText   
  21.         android:id="@+id/age"  
  22.         android:layout_width="fill_parent"  
  23.         android:numeric="integer"  
  24.         android:singleLine="true"  
  25.         android:layout_height="wrap_content"/>  
  26.     <Button   
  27.         android:id="@+id/save"  
  28.         android:layout_width="fill_parent"  
  29.         android:layout_height="wrap_content"  
  30.         android:text="@string/save"  
  31.         android:onClick="save"/>  
  32.   
  33. </LinearLayout>  

Strings.xml

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string name="hello">Hello World, MainActivity!</string>  
  4.     <string name="app_name">软件参数设置</string>  
  5.     <string name="username">姓名</string>  
  6.     <string name="age">年龄</string>  
  7.     <string name="save">保存参数</string>  
  8. </resources>  

MainActivity.java

[html]  view plain copy print ?
  1. package com.preferences.activity;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import com.preferences.service.PreferencesService;  
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.view.View;  
  9. import android.widget.EditText;  
  10. import android.widget.Toast;  
  11.   
  12. public class MainActivity extends Activity {  
  13.     private EditText name;  
  14.     private EditText age;  
  15.     private PreferencesService service;  
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.main);  
  20.         name = (EditText)findViewById(R.id.name);  
  21.         age = (EditText)findViewById(R.id.age);  
  22.         service = new PreferencesService(MainActivity.this);  
  23.         //打开时读取保存的参数  
  24.         Map<String,String> params = service.getPreferences();  
  25.         name.setText(params.get("username"));  
  26.         age.setText(params.get("age"));  
  27.     }  
  28.     public void save(View v){  
  29.         String userName = name.getText().toString();  
  30.         int userAge = Integer.parseInt(age.getText().toString());  
  31.         service.save(userName, userAge);  
  32.         Toast.makeText(MainActivity.this, "保存成功", 1).show();  
  33.     }  
  34. }  

PreferencesService.java

[html]  view plain copy print ?
  1. package com.preferences.service;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5. import android.content.Context;  
  6. import android.content.SharedPreferences;  
  7. import android.content.SharedPreferences.Editor;  
  8.   
  9. public class PreferencesService {  
  10.     private Context context;  
  11.     //构造方法中传入上下文对象  
  12.     public PreferencesService(Context context) {  
  13.         super();  
  14.         this.context = context;  
  15.     }  
  16.   
  17.     /**  
  18.      * 保存参数  
  19.      * @param name 姓名  
  20.      * @param age 年龄  
  21.      */  
  22.     public void save(String name,int age){  
  23.         SharedPreferences sharedPreferences = context.getSharedPreferences("itcastPreference", Context.MODE_PRIVATE);  
  24.         Editor editor = sharedPreferences.edit();  
  25.         editor.putString("username", name);  
  26.         editor.putInt("age", age);  //目前是保存在内存中,还没有保存到文件中  
  27.         editor.commit();    //数据提交到xml文件中  
  28.     }  
  29.       
  30.     /**  
  31.      * 获取各项配置参数  
  32.      * @return params  
  33.      */  
  34.     public Map<String,String> getPreferences(){  
  35.         SharedPreferences sharedPreferences = context.getSharedPreferences("itcastPreference", Context.MODE_PRIVATE);  
  36.         Map<String,String> params = new HashMap<String, String>();  
  37.         params.put("username", sharedPreferences.getString("username", ""));  
  38.         params.put("age", String.valueOf(sharedPreferences.getInt("age", 0)));  
  39.         return params;  
  40.     }  
  41. }  

当我们点击保存参数按钮之后,数据会保存到 /data/data/ [packagename] /shared_prefs目录下:



1
0
主题推荐
数据存储 android 源代码 encoding textview
猜你在找
Android设置无标题窗口
Android Selector 与 Shape 基本用法
超漂亮的仿腾讯弹出层效果兼容主流浏览器
service使用以及startServicestopServicebindServiceunbindService方法比较
一个Android程序中新手引导功能实现方式的变迁
一创建一个Button监听器使Button能打开另一个activity并传值
unable to send command to the emulator解决方案之一
printf记录程序日志彻底告别vsnprintf
Tabhost里面的Activity刷新问题--Activity生命周期
如何删除数据库中的冗余数据
id="ad_frm_0" frameborder="0" scrolling="no" src="http://blog.csdn.net/common/ad.html?t=4&containerId=ad_cen&frmId=ad_frm_0" style="border-width: 0px; overflow: hidden; width: 980px; height: 90px; ">
查看评论

  暂无评论

发表评论
  • 用 户 名:
  • Leaning_wk
  • 评论内容:
  • 插入代码
  •   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值