【Android学习笔记】SharedPreferences & AutoCompleteTextView

    四年时间如白驹过隙,转眼间,我也站在了毕业季的路口。过去的一年,从找实习到实习;再从找工作到工作。经历的种种,学习到的种种,应该是大学四年中比较宝贵的财富了。

  也由于这些事情,我总是匆忙的做着别人告诉我,我应该做的事情,所以博客写得少了。现在定下心来,我该做自己认为应该做的事情了。现实也许不会总是允许我们这样做。但时间嘛,就像乳沟,挤挤总是有的。

  回顾这四年,只剩一句感叹“还好,四年没有完全荒废。”

  最终工作签到了Android,虽然和以前学习的.Net似乎没有半点关系,而且开发环境和语言都改成了Java的那一套。我还是很庆幸有.Net的基础,帮助我学习Android。

今天记录一下SharedPreferences & AutoCompleteTextView,以后还有更多内容推出,帮助自己记录的同时,也希望可以帮到和我一样的Android新手。

  在此诚挚的感谢各位写技术博客的同志们,是你们让我在无从下手的时候找到了出路。顺道感谢Google 和  百毒。 

PS:学习Android,用好官方文档和百毒、Google,你就无敌了。-_-||

 

  SharedPreferences是以键值对来存储应用程序的配置信息的一种方式,它只能存储基本数据类型。一个程序的配置文件仅可以在本应用程序中使用,或者说只能在同一个包内使用,不能在不同的包之间使用。 实际上SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。

以下表格为获取SharedPreferences对象的两个方法:

返回值

函数

备注

SharedPreferences

Context.getSharedPreferences(String name,int mode)

name为本组件的配置文件名(如果想要与本应用程序的其他组件共享此配置文件,可以用这个名字来检索到这个配置文件)。

mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。

SharedPreferences

Activity.getPreferences(int mode)

配置文件仅可以被调用的Activity使用。

mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。

  如果要读取配置文件信息,只需要直接使用SharedPreferences对象的getXXX()方法即可,而如果要写入配置信息,则必须先调用SharedPreferences对象的edit()方法,使其处于可编辑状态,然后再调用putXXX()方法写入配置信息,最后调用commit()方法提交更改后的配置文件。

以下为示例代码,功能记录用户输入的用户名和密码,下次使用时可以不用输入;QQ栏可以记录用户输入过的QQ号,再次输入时可以自动提示。

注释写得比较详细,不再多说。

主Activity:  

SharedPreferencesDemo
   
     
1 package com.mtk.lc.SharedPreferencesDemo;
2
3   import android.app.Activity;
4   import android.content.SharedPreferences;
5   import android.os.Bundle;
6   import android.view.View;
7   import android.widget.ArrayAdapter;
8   import android.widget.AutoCompleteTextView;
9 import android.widget.Button;
10 import android.widget.EditText;
11
12 public class SharedPreferencesDemo extends Activity {
13 private Button btnok;
14 private EditText editText1;
15 private EditText editText2;
16 private AutoCompleteTextView autoCompleteTextView;
17 public static final String PREFS_STRING = " MyPrefs " ; // SharedPreferences名字
18
19 /** Called when the activity is first created. */
20 @Override
21 public void onCreate(Bundle savedInstanceState) {
22 super .onCreate(savedInstanceState);
23 setContentView(R.layout.main);
24 getCompents();
25 getPreferences();
26 }
27
28 /**
29 * 获取控件
30 * */
31 private void getCompents() {
32 btnok = (Button) findViewById(R.id.button1);
33 editText1 = (EditText) findViewById(R.id.editText1);
34 editText2 = (EditText) findViewById(R.id.editText2);
35 autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
36 btnok.setOnClickListener( new View.OnClickListener() {
37
38 @Override
39 public void onClick(View v) {
40 savePreferences();
41
42 }
43 });
44 }
45 /**
46 * 保存数据到SharedPreferences
47 * */
48 private void savePreferences() {
49 String qQString; // AutoCompleteTextView控件中所需要的Adapter数据
50 SharedPreferences settings = getSharedPreferences(PREFS_STRING,
51 MODE_PRIVATE);
52 SharedPreferences.Editor editor = settings.edit();
53 qQString = settings.getString( " QQ " , "" );
54 if ( ! qQString.contains(autoCompleteTextView.getText().toString())) { // 保证不会有重复的item存入
55 qQString += " # " + autoCompleteTextView.getText().toString(); // 每个Item以#号分隔;
56 // SharedPreferences只能保存基本数据类型,所以此处把Items保存为String,然后再解析成item数组
57 editor.putString( " QQ " , qQString);
58 }
59 editor.putString( " Name " , editText1.getText().toString());
60 editor.putString( " Password " , editText2.getText().toString());
61 editor.commit(); // 记得提交修改
62 }
63 /**
64 * 从SharedPreferences读取数据
65 * */
66 private void getPreferences() {
67 String qQString;
68 try {
69 SharedPreferences settings = getSharedPreferences(PREFS_STRING,
70 MODE_PRIVATE);
71 qQString = settings.getString( " QQ " , "" );
72 String[] qqStrings = qQString.split( " # " ); // 从读出的String中解析出Items
73 ArrayAdapter < String > adapter = new ArrayAdapter < String > ( this ,
74 android.R.layout.simple_dropdown_item_1line, qqStrings);
75 autoCompleteTextView.setAdapter(adapter); // 设置AutoCompleteTextView的内容
76 editText1.setText(settings.getString( " Name " , "" ));
77 editText2.setText(settings.getString( " Password " , "" ));
78 } catch (Exception e) {
79 // TODO: handle exception
80 }
81
82 }
83 }

Layout:

layout
   
     
1 <? xml version="1.0" encoding="utf-8" ?>
2 < LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
3 android:orientation ="vertical" android:layout_width ="fill_parent"
4 android:layout_height ="fill_parent" >
5 < TextView android:id ="@+id/textView1" android:layout_width ="wrap_content"
6 android:layout_height ="wrap_content" android:text ="Name" ></ TextView >
7 < EditText android:layout_width ="match_parent" android:id ="@+id/editText1"
8 android:layout_height ="wrap_content" ></ EditText >
9 < TextView android:id ="@+id/textView2" android:layout_width ="wrap_content"
10 android:layout_height ="wrap_content" android:text ="Password" ></ TextView >
11 < EditText android:layout_width ="match_parent" android:id ="@+id/editText2"
12 android:layout_height ="wrap_content" ></ EditText >
13 < TextView android:id ="@+id/textView3" android:layout_width ="wrap_content"
14 android:layout_height ="wrap_content" android:text ="QQ(Auto)" ></ TextView >
15 < AutoCompleteTextView android:layout_width ="match_parent"
16 android:id ="@+id/autoCompleteTextView1" android:layout_height ="wrap_content" ></ AutoCompleteTextView >
17 < Button android:layout_width ="wrap_content"
18 android:layout_height ="wrap_content" android:id ="@+id/button1"
19 android:text ="OK" ></ Button >
20 </ LinearLayout >

你可能感兴趣的:(【Android学习笔记】SharedPreferences & AutoCompleteTextView)