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怎么查看依旧是自己想办法去吧,不难的。哈哈!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。