当前位置:首页 > Android > 正文内容

采用SharedPreferences保存用户偏好设置参数和读取设置参数

jsc9年前 (2016-04-05)Android3536

Android SDK支持那些文件存储技术?

1. 使用SharedPreferences保存key-value类型的数据

2. 文件存储(使用openFileOutput和openFileInput方法,或FileInputStream和FileOutputStream)

3. XML半结构化存储

4. 用JSON保存数组和对象

5.用数据库保存结构化数据

6. 用第三方的面向对象数据库直接保存Java对象。


这篇博文主要介绍用SharedPreferences保存key-value对的步骤和读取设置参数的方法

1. 使用Context.getSharedPreferences方法获取SharedPreferences对象,其中存储key-value的文件的名称有getSharedPreferences方法第一个参数指定。

2. 使用SharedPreference.edit方法获取SharedPreferences.Editor对象。

3. 通过SharedPreference.Editor接口的putXxx方法保存key-value对。

4. 通过SharedPreference.Editor.commit方法提交要保存的key-value对。



实例:SharedPreferences

1366001990_6798.png

MainActivity.java

package com.wwj.setting;

import java.util.Map;

import com.wwj.service.PreferencesService;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Toast;

public class MainActivity extends Activity {
    private EditText nameText;        //姓名框
    private EditText ageText;        //年龄框
    private RadioGroup radioGroup;    //单选框组
    
    //业务逻辑类
    private PreferencesService service;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        nameText = (EditText)findViewById(R.id.nameText);
        ageText = (EditText)findViewById(R.id.ageText);
        radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
        service = new PreferencesService(this);
        
        Map<String, String> params = service.getPerferences();
        nameText.setText(params.get("name"));
        ageText.setText(params.get("age"));
        radioGroup.check(Integer.valueOf(params.get("sex")));    //设置选择的单选按钮
        
    }
    
    /**
     * 在布局中按钮控件指定的onClick方法
     * @param v
     */
    public void save(View v) {
        String name = nameText.getText().toString();
        String age = ageText.getText().toString();
        Integer sex = radioGroup.getCheckedRadioButtonId();
        service.save(name, Integer.valueOf(age), sex);
        Toast.makeText(getApplicationContext(), R.string.success, 1).show();
    }
    
}

PreferencesService.java

package com.wwj.service;

import java.util.HashMap;
import java.util.Map;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class PreferencesService {
    private Context context;

    public PreferencesService(Context context) {
        this.context = context;
    }

    /**
     * 保存参数
     * @param name    姓名
     * @param age    年龄    
     * @param sex    性别
     */
    public void save(String name, Integer age, Integer sex) {
        //获得SharedPreferences对象
        SharedPreferences preferences = context.getSharedPreferences("wwj", Context.MODE_PRIVATE);
        Editor editor = preferences.edit();
        editor.putString("name", name);
        editor.putInt("age", age);
        editor.putInt("sex", sex);
        editor.commit();
    }

    /**
     * 获取各项参数
     * @return
     */
    public Map<String, String> getPerferences() {
        Map<String, String> params = new HashMap<String, String>();
        SharedPreferences preferences = context.getSharedPreferences("wwj", Context.MODE_PRIVATE);
        params.put("name", preferences.getString("name", ""));
        params.put("age", String.valueOf(preferences.getInt("age", 0)));
        params.put("sex", String.valueOf(preferences.getInt("sex", 0)));
        return params;
    }
    
    
    
}


布局文件activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/name"/>
    <EditText 
        android:id="@+id/nameText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/age"/>
    <EditText 
        android:id="@+id/ageText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:numeric="integer"
        />
    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="性别" >

        <RadioButton
            android:id="@+id/radioButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/male" 
            android:checked="true"/>

        <RadioButton
            android:id="@+id/radioButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/female" />
    </RadioGroup>
    
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="save"
        android:text="@string/saveBtn" />
    
</LinearLayout>


扫描二维码推送至手机访问。

版权声明:本文由微小站发布,如需转载请注明出处。

本文链接:https://jsc0.com/post/60.html

分享给朋友:

“采用SharedPreferences保存用户偏好设置参数和读取设置参数 ” 的相关文章

TypedArray和obtainStyledAttributes使用

TypedArray和obtainStyledAttributes使用

在编写Android自定义按钮示例基础上,如果要指定字体大小产生这样的效果: 其实是不需要自定义变量的,可以直接使用TextView的配置属性: <com.easymorse.textbutton.TextButto...

java.util.Properties类

java.util.Properties类

一、认识properties文件   1、properties文件是一个文本文件 2、properties文件的语法有两种,一种是注释,一种属性配置。  注    释...

android json解析及简单例子

JSON的定义:       一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式...

实现应用程序只有在第一次启动时显示引导界面

第一次安装启动:启动页--->导航页-->主页面之后启动:启动页-->主页面实现的原理就是:在启动页面用做一个文件保存的状态,保存程序是不是第一次启动的状态。因为只是要保存一个状态,我们将这个程序是第一次打开就将他设为true,当他进入 主页面之后将他的状态未为false,因为都...

下拉刷新及滚动到底部加载更多的Listview使用

下拉刷新及滚动到底部加载更多的Listview使用

本文主要介绍可同时实现下拉刷新及滑动到底部加载更多的ListView的使用。 该ListView优点包括:a. 可自定义下拉响应事件(如下拉刷新)  b.可自定义滚动到底部响应的事件(如滑动到底部加载更多)  c.可自定义丰富的样式  d....