文档章节

android使用sharepreference保存用户操作数据

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 565
阅读 25
收藏 0

很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是j2se应用,我们会采用properties属性文件进行保存。如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下

资源目录图:


布局layout代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView 
        android:layout_width="fill_parent"
   		android:layout_height="wrap_content"
   		android:text="@string/name"
        />
    <EditText 
        android:id="@+id/name"
        android:layout_width="fill_parent"
   		android:layout_height="wrap_content"
   		android:hint="@string/name"
        />
    <TextView 
        android:layout_width="fill_parent"
   		android:layout_height="wrap_content"
   		android:text="@string/age"
        />
    <EditText
        android:id="@+id/age"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/age" 
        />
    <Button 
        android:id="@+id/save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/saveBtn"
        android:onClick="save"
        />
</LinearLayout>

MainActivity.java代码:

package org.dyb.sharepreferencedemo;

import java.util.Map;

import org.dyb.service.PreferencesService;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
	
	private EditText nameEdit;
	private EditText ageEdit;
	PreferencesService service;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		nameEdit=(EditText) findViewById(R.id.name);
		ageEdit=(EditText) findViewById(R.id.age);
		//saveBtn=(Button) findViewById(R.id.save);
		service=new PreferencesService(this);
		//回显
		Map<String,String> map=service.getPreferences();
		nameEdit.setText(map.get("name"));
		ageEdit.setText(map.get("age"));
	}

	@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;
	}

	public void save(View v){
		String nameString=nameEdit.getText().toString();
		String ageString=ageEdit.getText().toString();
		service.save(nameString, Integer.valueOf(ageString));
		Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_SHORT).show();
	}
	
	
}

PreferencesService.java代码:

package org.dyb.service;


import java.util.HashMap;
import java.util.Map;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class PreferencesService {
	private Context context;
	
	public PreferencesService(){}
	
	public PreferencesService(Context context){
		this.context=context;
	}
	
	public void save(String name,int age){
		SharedPreferences preferences=context.getSharedPreferences("ddd", Context.MODE_PRIVATE);
		Editor edit=preferences.edit();
		//数据是放在内存中的
		edit.putString("name", name);
		edit.putInt("age", age);
		//提交方法,把内存中的数据提交到文件中
		edit.commit();
	}
	//获取保存的文件内容
	public Map<String,String> getPreferences(){
		Map<String,String> param=new HashMap<String, String>();
		SharedPreferences preferences=context.getSharedPreferences("ddd", Context.MODE_PRIVATE);
		param.put("name", preferences.getString("name", ""));
		param.put("age", String.valueOf(preferences.getInt("age", 0)));
		return param;
	}
}


布局效果:

保存在ddd.xml中的数据:


本文转载自:http://blog.csdn.net/bq1073100909/article/details/37927397

共有 人打赏支持
指尖残雪
粉丝 7
博文 73
码字总数 0
作品 0
上海
后端工程师
SharePreference保存对象与集合

转载https://blog.csdn.net/qq_21937107/article/details/79735236 在Android中我们经常需要持久化保存数据,这时可以使用文件,SharePreference,以及SQLite等。如果我想保存一个对象呢?有...

sinat_17775997
04/23
0
0
50 Android Hack 读书笔记

1、可以指定android:weightSum属性2、使用include标签来应对变化3、使用ViewStub标签延迟加载有可能不需要加载的数据 标签中可以指定inflateId属性4、使用自定义ViewGroup,重写onMeasure、o...

千里山南
2015/02/15
0
2
Android数据的四种存储方式之一——总览

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览 作为一个完成的应用程序,数据存储操作是必不可少的。因此,Android系统一共提供了四种数据...

Airship
2015/03/25
0
0
Android中个人推崇的数据库使用方式

手机应用开发中经常会使用到数据库存储一些资料或者进行数据缓存,android中为我们提供了一个轻量的数据库,在上层进行了一层封装,同时还为我们提供了ContentProvider的框架,方便我们进行数...

码农明明
2014/10/15
0
4
Android数据的四种存储方式(一) —— 总览

作为一个完成的应用程序,数据存储操作是必不可少的。因此,Android系统一共提供了四种数据存储方式。分别是:SharePreference、SQLite、Content Provider和File。由于Android系统中,数据基...

的书法上的
2014/06/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker Compose 原理

Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制。也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 dock...

Java干货分享
33分钟前
0
0
解决过滤器中设置cookie无效的问题

解决过滤器中设置cookie无效的问题 代码现场 filterChain.doFilter(sessionSyncRequestWrapper, response);Cookie emailCook = WebServletUtil.getSelectedCookie(request.getCookies(), ......

黄威
44分钟前
0
0
Hbase Schema 设计注意事项及最佳实践总结

一个列族的所有列在硬盘上存放在一起,使用这个特性可以把不同访问模式的列放在不同列族,以便隔离它们。这也是HBase被称为面向列族的存储(column-family-oriented store)的原因。 1、RowKe...

PeakFang-BOK
57分钟前
2
0
t-io给群组成员内置排序

1、实现比较器Comparator<ChannelContext> package xxx;import java.util.Comparator;import java.util.Objects;import java.util.Set;import java.util.TreeSet;import or......

talent-tan
今天
2
0
px、em、rem 区别及作用

原文 起因: 一开始是为了解决页面放大时,字体不跟着放大的 bug。现在多用用于统一规范。 概念: 任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em...

lemos
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部