简单的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));
}
}
运行效果:
输入界面,分别输入对应格式数据,点击显示结果按钮。
显示界面:显示保存的数据。
生成的Preference文件mypref.xml,可以通过Android Device Monitor - FileExplorer - data/data/该apk的包名/shared_prefs找到。
可以通过点击右上角的下载按钮将文件下载到电脑中,打开就可以看到文件保存的内容。