zoukankan      html  css  js  c++  java
  • android 开发-数据存储之共享参数

    android提供5中数据存储方式

    •   数据存储之共享参数     
    •   内部存储
    •   扩展存储
    •   数据库存储
    •   网络存储
     而共享存储提供一种可以让用户存储保存一些持久化键值对在文件中,以供其他应用对这些共享参数进行调用。共享存储的数据类型包括:boolean/float/int/long/String,接下来是我在学习中的示例代码,实例代码中,通过junit进行单元测试,所以需要加入单元测试需要添加的测试包,以及添加单元测试的约束。
      AndroidManifest.xml
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.example.android_data_storage_share"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk
     8         android:minSdkVersion="8"
     9         android:targetSdkVersion="18" />
    10     <!-- 添加单元测试的约束 -->
    11     <instrumentation
    12         android:name="android.test.InstrumentationTestRunner"
    13         android:targetPackage="com.example.android_data_storage_share" >
    14     </instrumentation>
    15 
    16     <application
    17         android:allowBackup="true"
    18         android:icon="@drawable/ic_launcher"
    19         android:label="@string/app_name"
    20         android:theme="@style/AppTheme" >
    21 
    22         <!-- 单元测试需要添加单元测试包user-library -->
    23         <uses-library android:name="android.test.runner" />
    24 
    25         <activity
    26             android:name="com.example.android_data_storage_share.MainActivity"
    27             android:label="@string/app_name" >
    28             <intent-filter>
    29                 <action android:name="android.intent.action.MAIN" />
    30 
    31                 <category android:name="android.intent.category.LAUNCHER" />
    32             </intent-filter>
    33         </activity>
    34     </application>
    35 
    36 </manifest>
    资源清单文件
      xml:
     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     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     android:background="@drawable/psb"
    10     tools:context=".MainActivity" >
    11 
    12     <TextView
    13         android:id="@+id/usView"
    14         android:layout_width="wrap_content"
    15         android:layout_height="wrap_content"
    16         android:layout_alignParentLeft="true"
    17         android:layout_alignParentTop="true"
    18         android:layout_marginLeft="26dp"
    19         android:layout_marginTop="40dp"
    20         android:text="用户名:" />
    21 
    22     <EditText
    23         android:id="@+id/usernameText"
    24         android:layout_width="wrap_content"
    25         android:layout_height="wrap_content"
    26         android:layout_alignBaseline="@+id/usView"
    27         android:layout_alignBottom="@+id/usView"
    28         android:layout_toRightOf="@+id/usView"
    29         android:ems="10" >
    30 
    31         <requestFocus />
    32     </EditText>
    33 
    34     <TextView
    35         android:id="@+id/psView"
    36         android:layout_width="wrap_content"
    37         android:layout_height="wrap_content"
    38         android:layout_alignLeft="@+id/usView"
    39         android:layout_below="@+id/usernameText"
    40         android:layout_marginTop="18dp"
    41         android:text="密     码:" />
    42 
    43     <EditText
    44         android:id="@+id/passwordText"
    45         android:layout_width="wrap_content"
    46         android:layout_height="wrap_content"
    47         android:layout_alignLeft="@+id/usernameText"
    48         android:layout_below="@+id/usernameText"
    49         android:ems="10"
    50         android:inputType="textPassword" />
    51 
    52     <CheckBox
    53         android:id="@+id/usCheckBox"
    54         android:layout_width="wrap_content"
    55         android:layout_height="wrap_content"
    56         android:layout_alignLeft="@+id/psView"
    57         android:layout_below="@+id/passwordText"
    58         android:layout_marginTop="29dp"
    59         android:text="记住用户名" />
    60 
    61     <CheckBox
    62         android:id="@+id/radioCheckBox"
    63         android:layout_width="wrap_content"
    64         android:layout_height="wrap_content"
    65         android:layout_alignBaseline="@+id/usCheckBox"
    66         android:layout_alignBottom="@+id/usCheckBox"
    67         android:layout_marginLeft="18dp"
    68         android:layout_toRightOf="@+id/usCheckBox"
    69         android:text="静音登录" />
    70 
    71     <Button
    72         android:id="@+id/dlButton"
    73         android:layout_width="wrap_content"
    74         android:layout_height="wrap_content"
    75         android:layout_alignLeft="@+id/usCheckBox"
    76         android:layout_centerVertical="true"
    77         android:text="登录" />
    78 
    79     <Button
    80         android:id="@+id/cancelButton"
    81         android:layout_width="wrap_content"
    82         android:layout_height="wrap_content"
    83         android:layout_alignBaseline="@+id/dlButton"
    84         android:layout_alignBottom="@+id/dlButton"
    85         android:layout_marginLeft="32dp"
    86         android:layout_toRightOf="@+id/dlButton"
    87         android:text="取消" />
    88 
    89 </RelativeLayout>
    xml

      activity:

     1 package com.example.android_data_storage_share;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 import android.app.Activity;
     7 import android.content.Context;
     8 import android.os.Bundle;
     9 import android.view.Menu;
    10 import android.view.View;
    11 import android.widget.Button;
    12 import android.widget.CheckBox;
    13 import android.widget.EditText;
    14 
    15 import com.example.android_data_storage_share.perference.LoginService;
    16 
    17 /**
    18  * @author xiaowu 
    19  * @see  文件不要加后缀名,系统自动以.xml的文件保存 第一种方式:getSharedPreferences(name,
    20  *         int);共享参数是通过一个标识符来命名,这个文件是多个应用程序访问的,
    21  *         第二种方式:getPreferences(int)共享文件只给你当前的activity访问
    22  */
    23 public class MainActivity extends Activity {
    24     private Button dlButton;
    25     private Button cancelButton;
    26     private EditText usernameText;
    27     private EditText passwordText;
    28     private CheckBox usCheckBox;
    29     private CheckBox radioCheckBox;
    30     private LoginService loginService;
    31     private Map<String, ?> map = null;
    32 
    33     @Override
    34     protected void onCreate(Bundle savedInstanceState) {
    35         super.onCreate(savedInstanceState);
    36         setContentView(R.layout.activity_main);
    37         loginService = new LoginService(this);
    38         dlButton = (Button) findViewById(R.id.dlButton);
    39         cancelButton = (Button) findViewById(R.id.cancelButton);
    40         usernameText = (EditText) findViewById(R.id.usernameText);
    41         passwordText = (EditText) findViewById(R.id.passwordText);
    42         usCheckBox = (CheckBox) findViewById(R.id.usCheckBox);
    43         radioCheckBox = (CheckBox) findViewById(R.id.radioCheckBox);
    44         map = loginService.getSharePreference("login");
    45         if (map != null && !map.isEmpty()) {
    46             usernameText.setText(map.get("username").toString());
    47             passwordText.setText(map.get("password").toString());
    48             usCheckBox.setChecked((Boolean) map.get("isName"));
    49             radioCheckBox.setChecked((Boolean) map.get("isquiet"));
    50         } else {
    51             dlButton.setOnClickListener(new View.OnClickListener() {
    52                 @Override
    53                 public void onClick(View v) {
    54                     // TODO Auto-generated method stub
    55                     if (usernameText.getText().toString().trim()
    56                             .equals("admin")
    57                             && passwordText.getText().toString().trim()
    58                                     .equals("123456")) {
    59                         Map<String, Object> map = new HashMap<String, Object>();
    60                         if(usCheckBox.isChecked()){
    61                             map.put("username", usernameText.getText().toString()
    62                                     .trim());
    63                             map.put("password", passwordText.getText().toString()
    64                                     .trim());
    65                         }else{
    66                             map.put("username", "");
    67                             map.put("password", "");
    68                         }
    69                         map.put("isName", usCheckBox.isChecked());
    70                         map.put("isquiet", radioCheckBox.isChecked());
    71                         loginService.saveSharePreference("login", map);
    72                     }
    73                 }
    74             });
    75         }
    76 
    77     }
    78 
    79 }

      Service

      

     1 package com.example.android_data_storage_share.perference;
     2 
     3 import java.util.Map;
     4 
     5 import android.content.Context;
     6 import android.content.SharedPreferences;
     7 import android.content.SharedPreferences.Editor;
     8 
     9 public class LoginService {
    10 
    11     private Context context;
    12 
    13     public LoginService(Context context) {
    14         this.context = context;
    15     }
    16 
    17     public boolean saveLoginMsg(String name, String password) {
    18         boolean flag = false;
    19         // 文件不要加后缀名,系统自动以.xml的文件保存
    20         // 第一种方式:getSharedPreferences(name, int);共享参数是通过一个标识符来命名,这个文件是多个应用程序访问的,
    21         // 第二种方式:getPreferences(int)共享文件只给你当前的activity访问
    22         // 如果你想要文件既可读又可写,在参数中需要2中权限相加即可context.MODE_WORLD_WRITEABLE+context.MODE_WORLD_READABLE
    23         // SharedPreferences sharedPreferences =
    24         // context.getSharedPreferences(name,context.MODE_WORLD_WRITEABLE+context.MODE_WORLD_READABLE);
    25         SharedPreferences sharedPreferences = context.getSharedPreferences(
    26                 name, context.MODE_PRIVATE);
    27         Editor editor = sharedPreferences.edit();
    28         editor.putString("username", name);
    29         editor.putString("password", password);
    30         editor.commit();
    31         return flag;
    32     }
    33 
    34     /**
    35      * (共享储存)存储Map类型的数据
    36      * @author xiaowu
    37      * @param filename
    38      * @param map
    39      * @return
    40      */
    41     public boolean saveSharePreference(String filename, Map<String, Object> map) {
    42         SharedPreferences sharedPreferences = context.getSharedPreferences(
    43                 filename, Context.MODE_PRIVATE);
    44         Editor editor = sharedPreferences.edit();
    45         for (Map.Entry<String, Object> entry : map.entrySet()) {
    46             String key = entry.getKey();
    47             Object object = entry.getValue();
    48             if (object instanceof Boolean) {
    49                 Boolean new_name = (Boolean) object;
    50                 editor.putBoolean(key, new_name);
    51             } else if (object instanceof Integer) {
    52                 Integer integer = (Integer) object;
    53                 editor.putInt(key, integer);
    54             } else if (object instanceof Float) {
    55                 Float f = (Float) object;
    56                 editor.putFloat(key, f);
    57             } else if (object instanceof String) {
    58                 String s = (String) object;
    59                 editor.putString(key, s);
    60             } else if (object instanceof Long) {
    61                 Long l = (Long) object;
    62                 editor.putLong(key, l);
    63             }
    64         }
    65         return editor.commit();
    66     }
    67 
    68     // 读文件权限最低,不需要传递文件操作模式
    69     /**
    70      * @author xiaowu
    71      * @param fileName
    72      * @return
    73      */
    74     public Map<String,?> getSharePreference(String fileName){
    75         Map<String,?> map = null;
    76         SharedPreferences  sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE);
    77         map = sharedPreferences.getAll();
    78         return map;
    79     }
    80 }

      Test类

      

     1 package com.example;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 import android.test.AndroidTestCase;
     7 import android.util.Log;
     8 
     9 import com.example.android_data_storage_share.perference.LoginService;
    10 
    11 /**
    12  * @author xiaowu Note:必须继承AndroidTestCase这个class
    13  */
    14 public class MyTest extends AndroidTestCase {
    15     private final String TAG = "MyTest";
    16     
    17     public MyTest() {
    18         // TODO Auto-generated constructor stub
    19     }
    20     //通过方法名右键执行单元测试
    21     public void save() {
    22         LoginService service = new LoginService(getContext());
    23         boolean flag = service.saveLoginMsg("admin", "123");
    24         Log.i(TAG, "->>" + flag);
    25     }
    26     
    27     //通过方法名右键执行单元测试
    28     public void save2() {
    29         LoginService service = new LoginService(getContext());
    30         Map<String,Object> map = new HashMap<String, Object>();
    31         map.put("name", "hw");
    32         map.put("age", 12);
    33         map.put("salary", 3000.0f);
    34         map.put("id", 430381199007086018l);
    35         map.put("isMan", true);
    36         boolean flag = service.saveSharePreference("msg", map);
    37         Log.i(TAG, "->>" + flag);
    38     }
    39     //取文件中的值
    40     public void read(){
    41         LoginService service = new LoginService(getContext());
    42         Map<String,?> map = service.getSharePreference("msg");
    43         Log.i(TAG, "--->"+map.get("name"));
    44         Log.i(TAG, "--->"+map.get("age"));
    45         Log.i(TAG, "--->"+map.get("salary"));
    46         Log.i(TAG, "--->"+map.get("id"));
    47         Log.i(TAG, "--->"+map.get("isMan"));
    48     }
    49 }

      

  • 相关阅读:
    poj 3070 矩阵快速幂模板
    poj3207 2-SAT入门
    poj 3683 2-SAT入门
    2-SAT开坑
    poj 1442 名次树
    hdu 3068 最长回文子串 TLE
    poj 3261 二分答案+后缀数组 求至少出现k次的最长重复子序列
    poj 1743 二分答案+后缀数组 求不重叠的最长重复子串
    后缀数组笔记
    poj2774 后缀数组 求最长公共子串
  • 原文地址:https://www.cnblogs.com/HEWU10/p/4370820.html
Copyright © 2011-2022 走看看