Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> (Android review)SharePreferences的使用

(Android review)SharePreferences的使用

編輯:關於Android編程

 

典型應用場合:

進入某一界面以後,顯示默認值(其實這個也可以通過直接在布局文件中指定)

 

基本點:

1)SharePreferences所生成的文件最終還是以.xml文件的形式存在於/data/data/應用包名/share_prefs/xxx.xml中

2)SharePreferences適合用於存儲key-value型的數據

 

基本使用:

存:

 

Editor editor = sp.edit();//獲取編輯器
		editor.putString(name, name);//存儲數據(還沒進入進入文件)
		editor.putString(phone, phone);
		editor.putString(email, email);
		editor.commit();//提交修改(類似於事務)

取:

 

 

sp = getSharedPreferences(data, MODE_PRIVATE);//獲取對象,默認指向當前應用.文件名為data.xml,模式為私有
//	    sp = getPreferences(MODE_PRIVATE);//這時候生成的文件名為MainActivity.xml
		
		et_name.setText(sp.getString(name, ));
		et_phone.setText(sp.getString(phone, ));
		et_email.setText(sp.getString(email, ));

 

解析:為什麼我們使用getPreferences(MODE_PRIVATE)時生成的文件名為MainActivity.xml呢??如下圖所示:

/

 

其實在之前的博客我就提過,這種很類似的函數,在底層實現的時候,很可能就是你調我,我調你的。。。事實勝於雄辯,源碼面前無秘密。。現在我們就去看看Android源碼中這兩個函數就知道了。。。

 

源碼分析:

先看getSharedPreferences(String name, int mode):

 

 @Override
    public SharedPreferences getSharedPreferences(String name, int mode) {
        return mBase.getSharedPreferences(name, mode);
    }


 

接下來,看一下getPreferences(int mode):

 

 /**
     * Retrieve a {@link SharedPreferences} object for accessing preferences
     * that are private to this activity.  This simply calls the underlying
     * {@link #getSharedPreferences(String, int)} method by passing in this activity's
     * class name as the preferences name.
     * 
     * @param mode Operating mode.  Use {@link #MODE_PRIVATE} for the default 
     *             operation, {@link #MODE_WORLD_READABLE} and 
     *             {@link #MODE_WORLD_WRITEABLE} to control permissions.
     *
     * @return Returns the single SharedPreferences instance that can be used
     *         to retrieve and modify the preference values.
     */
    public SharedPreferences getPreferences(int mode) {
        return getSharedPreferences(getLocalClassName(), mode);
    }

getPreferences(int mode)方法中用到了getLocalClassName()這個函數,其實這個函數不需要看它的源碼,單單是看它的名字就知道他是干什麼的了:獲取當前Activity的名字。。。。不過既然看到這裡了,我們還是去看一下它的源碼都是怎麼寫的吧。

 

 

/**
     * Returns class name for this activity with the package prefix removed.
     * This is the default name used to read and write settings.
     * 
     * @return The local class name.
     */
    public String getLocalClassName() {
        final String pkg = getPackageName();
        final String cls = mComponent.getClassName();//獲取長類名:包名+類名
        int packageLen = pkg.length();
        if (!cls.startsWith(pkg) || cls.length() <= packageLen
                || cls.charAt(packageLen) != '.') {
            return cls;
        }
        return cls.substring(packageLen+1);//截取包名後面的那一段.也就是類名
    }


 

 

 

 

 

例子:

1、MainActivity

 

package com.example.sharepreferencetest;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {

	private EditText et_name;
	private EditText et_phone;
	private EditText et_email;
	private SharedPreferences sp;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	    
		et_name = (EditText) findViewById(R.id.nameET);
		et_phone = (EditText) findViewById(R.id.phoneET);
		et_email = (EditText) findViewById(R.id.emailET);
		
		sp = getSharedPreferences(data, MODE_PRIVATE);//獲取對象,默認指向當前應用.文件名為data.xml,模式為私有
//	    sp = getPreferences(MODE_PRIVATE);//這時候生成的文件名為MainActivity.xml
		
		et_name.setText(sp.getString(name, ));
		et_phone.setText(sp.getString(phone, ));
		et_email.setText(sp.getString(email, ));
		
	}

	public void onClick(View view){
		String name = et_name.getText().toString();
		String phone = et_phone.getText().toString();
		String email = et_email.getText().toString();
		

		
		Editor editor = sp.edit();//獲取編輯器
		editor.putString(name, name);//存儲數據(還沒進入進入文件)
		editor.putString(phone, phone);
		editor.putString(email, email);
		editor.commit();//提交修改(類似於事務)
		
		
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

2、main.xml

 

 




    

    

        
    

    

    

    

    


 

效果圖:

 

/

 

 

生成的data.xml文件的內容如下:

 


[email protected] 13675173829 hjd

 

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved