5.2.1 需求分析效果图
5.2.2 设计思路与步骤
1. 首先布局,不多说。三个TextView、三个EditText、一个Button搞定。各id不用,三个EditText必须用id,而按钮在main.xml中要注册个onClick事件即可。
2. 关键是如何让应用程序一开始就可以显示上次,保存成功的设置的值呢?如何又将本次修改设置的新值保存起来呢?显然需求个SharedPerferences对象,而此对象肯定也是与手机应用文件相关(实际文件是存放在/data/data/包名/shared_prefs文件夹下),那么可以通过Context对象的getSharedPerferences(“文件名”,应用MODE模式)获取SharedPerferences对象。
3. 有了此对象后,那么我们可以在activity类的onCreate方法中,将各控件中的值设置为从sp.getString(“key”)中读取的值。那么还有个问题是如何保存本次修改的值。
4. 通过按钮中注册的onClick方法,将分别以上三个EditText中的值,将用sp.getEditor获取的Editor对象editor,editor.putString(“key”,”value”),最后再用editor.commit下就Ok了。
4.1 在程序中保存一些配置参数的时候我们经常使用SharedPreferences
Context.getSharedPreferences(String name,int mode)
该方法可以在/data/data/<package>/shared_pref/目录下创建一个以name命名的xml文件,mode文件为模式
4.2 存储偏好
调用edit()方法可以获取一个Editor对象,对数据进行存储,存储之后需要调用commit()保存到文件
4.3读取偏好
获得SharedPreferences之后调用getString()、getInt()等方法获取其中设置的值
4.4在Activity中获取SharedPreferences
在Activity中可以调用getPreferences(int mode)方法获得一个SharedPreferences,文件名和Activity名一致
5.2.3 SharedPerferences的示例代码
package com.test.sharedperferences;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText nameET;
private EditText phoneET;
private EditText emailET;
private SharedPreferences sp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sp = getSharedPreferences("qq", Context.MODE_PRIVATE);
nameET = (EditText)findViewById(R.id.name);
phoneET = (EditText)findViewById(R.id.phone);
emailET = (EditText) findViewById(R.id.email);
//一开启一个Activity就把SharedPerferences中的内容读取出来,放入到相应的位置中去。
nameET.setText(sp.getString("name", ""));
phoneET.setText(sp.getString("phone", ""));
emailET.setText(sp.getString("email", ""));
}
/**
* 每次点击时,将内容获取出来并保存到SharedPerferences中去。
* @param view
*/
public void onClick(View view){
try {
String name = nameET.getText().toString();
String phone = phoneET.getText().toString();
String email = emailET.getText().toString();
//保存起来需要先获取Editor对象。
Editor editor = sp.edit();
editor.putString("name", name);
editor.putString("phone", phone);
editor.putString("email", email);
editor.commit(); //存放后,需要提交。
Toast.makeText(this, "保存成功", 0).show();
} catch (Exception e) {
Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
}