Android SharedPreferences轻型数据存储简例实战

今天各种回顾整理知识点,直接就把Android数据存储这块大致都整理搞下吧,说起来也有四种方式。数据库说过了,解析来说说SharedPreferences。SharedPreferences是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<package name>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。实现SharedPreferences存储的步骤如下:一、根据Context获取SharedPreferences对象。二、利用edit()方法获取Editor对象。三、通过Editor对象存储key-value键值对数据。四、通过commit()方法提交数据。

这段代码执行过后,即在/data/data/com.test/shared_prefs目录下生成了一个remembered.xml文件,一个应用可以创建多个这样的xml文件。

SharedPreferences与SQLite数据库比方便,简洁。SharedPreferences也有缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。

别的不多说,还是整一个简单的随意书写实现的代码吧(只是为了学习,随意写的,实现SharedPreferences就行,bug四处飞扬,罪过罪过。。。)

功能:一个自动下拉的输入框和一个按钮,输入ip后点击button模拟连接,将ip数据写入xml保存,下次进入输入ip时自动提示历史输入过的ip信息。

activity_main.xml

<LinearLayout 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:layout_marginLeft="100dp"
    android:layout_marginRight="100dp"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <AutoCompleteTextView 
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Please In Put IP Address"
        android:textColorHint="@android:color/darker_gray"/>
    
    <Button 
        android:id="@+id/connect"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Connect"
        android:textSize="20sp"/>

</LinearLayout>

MainActivity.java

package com.jesse.sharedpreferencestest;

import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;

/**
 * @author Jesse
 * learn SharedPreferences.
 */
public class MainActivity extends Activity {
	private final static String SHARED_PREFERENCES_FILE_NAME = "remembered_xml";
	private final static String FIELD_FLAG_STR = "remembered";
	private AutoCompleteTextView mTextView;
	private Button mButton;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		initData();
	}
	
	private void initData()
	{
		mTextView = (AutoCompleteTextView) this.findViewById(R.id.text);
		mButton = (Button) this.findViewById(R.id.connect);
		
		mButton.setOnClickListener(clickListener);

		initAutoCompleteTextView(FIELD_FLAG_STR , mTextView);
	}
	
	private OnClickListener clickListener = new OnClickListener() {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			saveSharedPreferences(FIELD_FLAG_STR, mTextView);
		}
	};
	
	private void initAutoCompleteTextView(String field,AutoCompleteTextView auto) {
		final String[] newArrays = new String[50];
		SharedPreferences sp = getSharedPreferences(SHARED_PREFERENCES_FILE_NAME, 0);
		String longhistory = sp.getString(field, "");
		String[]  hisArrays = longhistory.split(",");
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_dropdown_item_1line, hisArrays);
		//save current history limit 5 line.
		if(hisArrays.length > 5){
			System.arraycopy(hisArrays, 0, newArrays, 0, 5);
			adapter = new ArrayAdapter<String>(this,
					android.R.layout.simple_dropdown_item_1line, newArrays);
		}
		auto.setAdapter(adapter);
		auto.setDropDownHeight(300);
		auto.setThreshold(1);
		auto.setCompletionHint("Recently used IP history");
		
		auto.setOnFocusChangeListener(new OnFocusChangeListener() {
			@Override
			public void onFocusChange(View v, boolean hasFocus) {
				AutoCompleteTextView view = (AutoCompleteTextView) v;
				if (hasFocus) {
					view.showDropDown();
				}
			}
		});
	}

	private void saveSharedPreferences(String field,AutoCompleteTextView auto) {
		String text = auto.getText().toString();
		SharedPreferences sp = getSharedPreferences(SHARED_PREFERENCES_FILE_NAME, 0);
		String longhistory = sp.getString(field, "");
		if (!longhistory.contains(text + ",")) {
			StringBuilder sb = new StringBuilder(longhistory);
			sb.insert(0, text + ",");
			sp.edit().putString(field, sb.toString()).commit();
		}
	}
}

完事,操作起来比数据库简单多了,记得提交就行,还有生成的xml怎么查看依旧是自己想办法去吧,不难的。哈哈!

Android SharedPreferences轻型数据存储简例实战,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。