首页 > Android > 正文

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

2016-04-05 Android 3155 ℃ 0 评论

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>


日历
«    2024年11月    »
123
45678910
11121314151617
18192021222324
252627282930
标签列表
最近发表
友情链接