Android SharedPreferences使用

简单的key-value用Preference保存比文件保存方便的多,做了一个简单的apk,保存了简单三个key-value,分别是String,int和boolean。

第一个MainActivity用来编辑和保存需要保存的数据,并通过查看按钮调用SecondActivity来调用并查看已经保存的数据。

MainActivity布局文件activity_main.xml代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/edit_text_str"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入字符串" />

    <Button
        android:onClick="onSaveStr"
        android:id="@+id/btn_save_str"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/edit_text_str"
        android:text="Save" />

    <EditText
        android:id="@+id/edit_test_num"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_save_str"
        android:inputType="number"
        android:hint="输入数字" />

    <Button
        android:onClick="onSaveNum"
        android:id="@+id/btn_save_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/edit_test_num"
        android:text="Save" />

    <CheckBox
        android:id="@+id/checkbox_save"
        android:layout_below="@+id/btn_save_num"
        android:text="是否勾线"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:onClick="onGet"
        android:layout_below="@+id/checkbox_save"
        android:text="显示结果"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

MainActivity代码:

package com.lucky.mysharedpreferences03;

import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {
    //定义文件名,方便之后直接调用
    public static final String PREPNAME = "mypref";
    //定义键值对的key名字,方便直接调用
    public static final String DATANAMESTR = "data_name_str";
    public static final String DATANAMENUM = "data_name_num";
    public static final String DAtANAMEIFCHECK = "data_name_ifcheck";

    EditText editTextStr;
    EditText editTextNum;
    CheckBox checkBox;

    SharedPreferences preferences;
    SharedPreferences.Editor editor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //调用initView()方法初始化控件
        initView();

        preferences = getSharedPreferences(PREPNAME, MODE_PRIVATE);
        editor = preferences.edit();
    }
    //初始化控件
    private void initView() {
        editTextStr = (EditText) findViewById(R.id.edit_text_str);
        editTextNum = (EditText) findViewById(R.id.edit_test_num);
        checkBox = (CheckBox) findViewById(R.id.checkbox_save);
    }
    //保存字符串按钮的触发事件
    public void onSaveStr(View view) {
        if (editTextStr.getText().toString().length() == 0) {
            //如果字符串编辑框唯恐,则调用warn()方法弹出警告
            warn();
        } else {
            //获取编辑框内字符串,并保通过editor存
            editor.putString(DATANAMESTR, editTextStr.getText().toString());
            //保存后需要使用commit()才能使操作有效
            editor.commit();
        }
    }
    //保存整数按钮的触发事件
    public void onSaveNum(View view) {
        if (editTextNum.getText().toString().length() == 0) {
            warn();
        } else {
            //将EditText中的String转化成int
            int i = Integer.parseInt(editTextNum.getText().toString());
            editor.putInt(DATANAMENUM, i);
            editor.commit();
        }
    }
    //显示按钮的触发事件
    public void onGet(View view) {
        //将checkbox的勾选状态保存
        editor.putBoolean(DAtANAMEIFCHECK, checkBox.isChecked());
        editor.commit();
        //启动SecondActivity显示保存的数据
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }

    private void warn() {
        Toast.makeText(this, "请检查输入是否合法", Toast.LENGTH_SHORT).show();
    }
}

SecondActivity布局文件activity_second.xml文件代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:textSize="30sp"
        android:hint="没有获取到数据"
        android:id="@+id/text_view_str"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_marginTop="30dp"
        android:textSize="30sp"
        android:hint="没有获取到数据"
        android:id="@+id/text_view_num"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <CheckBox
        android:id="@+id/checkbox_get"
        android:layout_marginTop="30sp"
        android:textSize="30sp"
        android:text="查看我的状态"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

SecondActivity代码:

package com.lucky.mysharedpreferences03;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.TextView;

/**
 * Created by lucky on 15/3/24.
 */
public class SecondActivity extends Activity {
    TextView textViewStr;
    TextView textViewNum;
    CheckBox checkBox;

    SharedPreferences preferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        initView();
        setDataToView();
    }

    private void initView() {
        textViewStr = (TextView) findViewById(R.id.text_view_str);
        textViewNum = (TextView) findViewById(R.id.text_view_num);
        checkBox = (CheckBox) findViewById(R.id.checkbox_get);
    }

    private void setDataToView() {
        preferences = getSharedPreferences(MainActivity.PREPNAME, MODE_PRIVATE);
        textViewStr.setText(preferences.getString(MainActivity.DATANAMESTR, ""));
        int i = preferences.getInt(MainActivity.DATANAMENUM, 0x002);
        if (i != 0x002) {
            textViewNum.setText("" + i);
        }
        checkBox.setChecked(preferences.getBoolean(MainActivity.DAtANAMEIFCHECK, false));
    }
}

运行效果:
输入界面,分别输入对应格式数据,点击显示结果按钮。
MainActivity界面,输入数据并保存
显示界面:显示保存的数据。
SecondActivity界面,显示保存的数据

生成的Preference文件mypref.xml,可以通过Android Device Monitor - FileExplorer - data/data/该apk的包名/shared_prefs找到。
文件位置

可以通过点击右上角的下载按钮将文件下载到电脑中,打开就可以看到文件保存的内容。
文件内容

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值