SharedPreferences和SQLite
来源:互联网 发布:程序员用什么画流程图 编辑:程序博客网 时间:2024/06/16 06:42
在Android存在中有两个和很重要的存储方式,一个是XML一个是数据库。
下面我就来介绍一下这样两个工具,SharedPreferences和SQLite
用着两个存储,我建议大家用工具类的方法进行操作。这样能让代码更加简洁和更好操作
下面我写一个小例子:
用SharedPreferences进行XML存储,注册账号和密码并且记上相关信息
用SQLite存储studio表。对其进行增删改查
下面开始写了。先创建两个工具类。放在utility文件夹下
1
import android.content.Context;
2
import android.content.SharedPreferences;
3
4
/**
5
* Created by YacaToy on 2017/7/1.
6
*
7
* SharedPreferences工具
8
*
9
*/
10
public class SpUtil {
11
12
private static SharedPreferences sp;
13
14
/**
15
* @param context 上下文
16
* @param key 存储节点的名称
17
* @param value 存储节点的值 String类型
18
*/
19
public static void putString(Context context, String key , String value){
20
if(sp == null){
21
sp = context.getSharedPreferences("appmessage", Context.MODE_PRIVATE);
22
}
23
sp.edit().putString(key,value).commit();
24
}
25
26
/**
27
*
28
* @param context 上下文
29
* @param key 存储节点的名称
30
* @param defValue 默认值或者此节点读取到的结果
31
* @return
32
*/
33
public static String getString(Context context,String key ,String defValue){
34
if (sp == null){
35
sp = context.getSharedPreferences("appmessage", Context.MODE_PRIVATE);
36
}
37
return sp.getString(key, defValue);
38
}
39
40
41
}
通过这个工具类类,使用静态方法,更加方便数据的存储
再创建标签使用的类。
1
/**
2
* Created by YacaToy on 2017/7/1.
3
*/
4
5
public class ConstanValue {
6
7
/**
8
* 账号
9
*/
10
public static final String NUMBER = "number";
11
12
/**
13
* 密码
14
*/
15
public static final String PWQ = "pwq";
16
17
/**
18
* 姓名
19
*/
20
public static final String NMAE = "nmae";
21
22
/**
23
* 电话号码
24
*/
25
public static final String PHONE = "phone";
26
27
/**
28
* 性别
29
*/
30
public static final String SEX = "sex";
31
32
}
在这个界面中添加数据,存储到XML中
1
import android.app.Activity;
2
import android.os.Bundle;
3
import android.support.annotation.IdRes;
4
import android.support.annotation.Nullable;
5
import android.util.Log;
6
import android.view.View;
7
import android.widget.Button;
8
import android.widget.EditText;
9
import android.widget.RadioButton;
10
import android.widget.RadioGroup;
11
import android.widget.Toast;
12
13
import toy.yacatool.com.myappspandsql.R;
14
import toy.yacatool.com.myappspandsql.utility.ConstanValue;
15
import toy.yacatool.com.myappspandsql.utility.SpUtil;
16
17
/**
18
* Created by YacaToy on 2017/7/1.
19
*/
20
21
public class LoginActivity extends Activity {
22
private Button bt_confirm;
23
private RadioGroup rg_sex;
24
private EditText et_longin_number ,et_login_name ,et_longin_phone , et_login_pwq;
25
private static final String TAG = "LoginActivity";
26
27
protected void onCreate( Bundle savedInstanceState) {
28
super.onCreate(savedInstanceState);
29
setContentView(R.layout.activity_login);
30
initView();
31
32
}
33
34
/**
35
* View控件
36
*/
37
private void initView() {
38
et_longin_number = findViewById(R.id.et_login_number);
39
et_login_pwq = findViewById(R.id.et_login_pwq);
40
et_login_name = findViewById(R.id.et_login_name);
41
et_longin_phone = findViewById(R.id.et_longin_phone);
42
rg_sex = findViewById(R.id.rg_sex);
43
bt_confirm = findViewById(R.id.bt_confirm);
44
45
46
47
bt_confirm.setOnClickListener(new View.OnClickListener() {
48
49
public void onClick(View v) {
50
if(et_longin_number.getText().toString().trim() == null){
51
Toast.makeText(getApplicationContext(),"请输入账号",Toast.LENGTH_SHORT).show();
52
}else{
53
String number = et_longin_number.getText().toString().trim();
54
SpUtil.putString(getApplicationContext(), ConstanValue.NUMBER,number);
55
}
56
57
String pwq = et_login_pwq.getText().toString().trim();
58
if(pwq == null){
59
Toast.makeText(getApplicationContext(),"密码",Toast.LENGTH_SHORT).show();
60
}else{
61
SpUtil.putString(getApplicationContext(), ConstanValue.PWQ,pwq);
62
}
63
64
String name = et_login_name.getText().toString().trim();
65
if(name == null){
66
Toast.makeText(getApplicationContext(),"请输入名字",Toast.LENGTH_SHORT).show();
67
}else{
68
SpUtil.putString(getApplicationContext(),ConstanValue.NMAE,name);
69
}
70
71
String phone = et_longin_phone.getText().toString().trim();
72
if(phone == null){
73
Toast.makeText(getApplicationContext(),"请输入电话号码",Toast.LENGTH_SHORT).show();
74
}else{
75
SpUtil.putString(getApplicationContext(),ConstanValue.PHONE,phone);
76
}
77
78
RadioButton radioButton = findViewById(rg_sex.getCheckedRadioButtonId());
79
if(radioButton == null){
80
Log.w(TAG,"请选择性别");
81
}else{
82
String sex = radioButton.getText().toString();
83
SpUtil.putString(getApplicationContext(),ConstanValue.SEX,sex);
84
Log.w(TAG,sex);
85
}
86
finish();
87
88
}
89
90
});
91
92
}
93
94
95
}
大家可以看到这样的话,就能更加简单的把数据存储到文件中去,读和取都是以样的
1
SpUtil.putString(getApplicationContext(),ConstanValue.SEX,sex);
下面是登录
1
import android.content.Intent;
2
import android.support.v7.app.AppCompatActivity;
3
import android.os.Bundle;
4
import android.view.View;
5
import android.widget.Button;
6
import android.widget.EditText;
7
import android.widget.Toast;
8
9
import toy.yacatool.com.myappspandsql.R;
10
import toy.yacatool.com.myappspandsql.utility.ConstanValue;
11
import toy.yacatool.com.myappspandsql.utility.SpUtil;
12
13
public class MainActivity extends AppCompatActivity {
14
private EditText et_number,et_pwq;
15
16
protected void onCreate(Bundle savedInstanceState) {
17
super.onCreate(savedInstanceState);
18
setContentView(R.layout.activity_main);
19
initView();
20
}
21
/**
22
* View控件
23
*/
24
private void initView() {
25
et_number = (EditText) findViewById(R.id.et_number);
26
et_pwq = (EditText) findViewById(R.id.et_pwq);
27
Button bu_login = (Button) findViewById(R.id.bt_login);
28
Button bt_log = (Button) findViewById(R.id.bt_log);
29
bu_login.setOnClickListener(new myClink());
30
bt_log.setOnClickListener(new myClink());
31
}
32
33
class myClink implements View.OnClickListener{
34
35
36
public void onClick(View v) {
37
switch (v.getId()){
38
//注册
39
case R.id.bt_login:
40
startActivity(new Intent(MainActivity.this,LoginActivity.class));
41
42
break;
43
//登录
44
case R.id.bt_log:
45
String number = SpUtil.getString(getApplicationContext(), ConstanValue.NUMBER,"没有");
46
47
if(et_number.getText().toString().trim().equals(number)){
48
String pwq = SpUtil.getString(getApplicationContext(), ConstanValue.PWQ,"没有");
49
if (et_pwq.getText().toString().trim().equals(pwq)){
50
startActivity(new Intent(MainActivity.this,ExamineActivity.class));
51
52
}else{
53
Toast.makeText(getApplicationContext(),"请输入正确密码",Toast.LENGTH_SHORT).show();
54
}
55
}else{
56
Toast.makeText(getApplicationContext(),"没有该账号",Toast.LENGTH_SHORT).show();
57
}
58
59
60
break;
61
}
62
}
63
}
64
65
}
66
读取数据就变得简单。适合所有String类型的存储。如果需要其他类型的存储之需要修改类型即可
1
SpUtil.getString(getApplicationContext(), ConstanValue.PWQ,"没有");
大家可以试着写出。所有数据的界面。用SpUtil读取出来
然后下面介绍SQLite
要玩成就是这么一个界面
操作数据库首先要有一个数据库。
1
import android.content.Context;
2
import android.database.sqlite.SQLiteDatabase;
3
import android.database.sqlite.SQLiteOpenHelper;
4
5
/**
6
* Created by YacaToy on 2017/7/2.
7
*/
8
9
public class StudioOpenHelper extends SQLiteOpenHelper {
10
private final String SQL = "create table studio (_id integer primary key autoincrement" +
11
" , name varchar(50),phone varchar(20));";
12
13
public StudioOpenHelper(Context context) {
14
super(context, "studio.db", null, 1);
15
}
16
17
18
public void onCreate(SQLiteDatabase db) {
19
db.execSQL(SQL);
20
}
21
22
23
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
24
25
}
26
}
27
创建一个数据库
然后再创建一个数据库操作的单例模式
1
import android.content.ContentValues;
2
import android.content.Context;
3
import android.database.Cursor;
4
import android.database.sqlite.SQLiteDatabase;
5
6
import java.util.ArrayList;
7
import java.util.List;
8
9
import toy.yacatool.com.myappspandsql.db.StudioOpenHelper;
10
import toy.yacatool.com.myappspandsql.db.domain.StudioInfo;
11
12
/**
13
* Created by YacaToy on 2017/7/2.
14
* Studio的单例模式
15
*/
16
17
public class StudioDao {
18
private StudioOpenHelper studioOpenHelper;
19
private Context context;
20
21
//Studio的单例模式
22
//1,私有化构造方法
23
private StudioDao(Context context){
24
this.context = context;
25
studioOpenHelper = new StudioOpenHelper(context);
26
}
27
28
//2,声明一个当前类
29
private static StudioDao studioDao = null;
30
31
//3,提供一个静态方法,如果当前类的对象为空,创建一个新的类
32
public static StudioDao getInstance(Context context){
33
if (studioDao == null){
34
studioDao = new StudioDao(context);
35
return studioDao;
36
}
37
return studioDao;
38
}
39
40
//增
41
public void add(String name ,String phone){
42
SQLiteDatabase db = studioOpenHelper.getWritableDatabase();
43
ContentValues values = new ContentValues();
44
values.put("name",name);
45
values.put("phone",phone);
46
db.insert("studio",null,values);
47
db.close();
48
}
49
50
//删
51
public void delest(String name){
52
SQLiteDatabase db = studioOpenHelper.getWritableDatabase();
53
db.delete("studio","name = ?" ,new String[]{name});
54
db.close();
55
}
56
57
//改
58
public void change(String name ,String phone){
59
SQLiteDatabase db = studioOpenHelper.getWritableDatabase();
60
ContentValues values = new ContentValues();
61
values.put("phone",phone);
62
db.update("studio",values,"name = ?",new String[]{name});
63
db.close();
64
}
65
66
//查
67
68
public List<StudioInfo> examineAll(){
69
SQLiteDatabase db = studioOpenHelper.getWritableDatabase();
70
//参数1:表名
71
//参数2:要想显示的列
72
//参数3:where子句
73
//参数4:where子句对应的条件值
74
//参数5:分组方式
75
//参数6:having条件
76
//参数7:排序方式
77
Cursor cursor = db.query("studio",new String[]{"name","phone"},null,null,null,null,null);
78
List<StudioInfo> list = new ArrayList<StudioInfo>();
79
while (cursor.moveToNext()){
80
StudioInfo studioInfo = new StudioInfo();
81
String name = cursor.getString(0);
82
studioInfo.setName(name);
83
String phone = cursor.getString(1);
84
studioInfo.setPhone(phone);
85
list.add(studioInfo);
86
}
87
cursor.close();
88
db.close();
89
return list;
90
}
91
92
}
这里的查询就是查询所有的数据
1
import android.app.Activity;
2
import android.os.Bundle;
3
import android.os.Handler;
4
import android.os.Message;
5
import android.support.annotation.Nullable;
6
import android.util.Log;
7
import android.view.View;
8
import android.view.ViewGroup;
9
import android.widget.BaseAdapter;
10
import android.widget.Button;
11
import android.widget.EditText;
12
import android.widget.ListView;
13
import android.widget.TextView;
14
15
import java.util.List;
16
17
import toy.yacatool.com.myappspandsql.R;
18
import toy.yacatool.com.myappspandsql.db.dao.StudioDao;
19
import toy.yacatool.com.myappspandsql.db.domain.StudioInfo;
20
21
22
/**
23
* Created by YacaToy on 2017/7/2.
24
*/
25
26
public class StudioActivity extends Activity {
27
28
private String name ,phone;
29
30
private final String TAG = "StudioActivity";
31
private EditText et_studio_name ,et_studio_phone;
32
private Button bt_add ,bt_refer ,bt_cancel , bt_change;
33
private MyAdaper myAdaper;
34
private StudioDao dao ;
35
private List<StudioInfo> studioInfos;
36
private ListView lv_studio;
37
private Handler mHandler = new Handler(){
38
39
public void handleMessage(Message msg) {
40
myAdaper = new MyAdaper();
41
lv_studio.setAdapter(myAdaper);
42
}
43
};
44
45
46
protected void onCreate( Bundle savedInstanceState) {
47
super.onCreate(savedInstanceState);
48
setContentView(R.layout.activity_studio);
49
initData();
50
initView();
51
52
}
53
54
/**
55
* 数据
56
*/
57
private void initData() {
58
new Thread(){
59
60
public void run() {
61
dao = StudioDao.getInstance(getApplicationContext());
62
studioInfos = dao.examineAll();
63
Message msg = Message.obtain();
64
msg.what = 0;
65
mHandler.sendMessage(msg);
66
}
67
}.start();
68
69
70
}
71
72
/**
73
* 控件
74
*/
75
private void initView() {
76
lv_studio = findViewById(R.id.lv_studio);
77
et_studio_name = findViewById(R.id.et_studio_name);
78
et_studio_phone = findViewById(R.id.et_studio_phone);
79
bt_add = findViewById(R.id.bt_add);
80
81
bt_cancel = findViewById(R.id.bt_cancel);
82
bt_cancel.setOnClickListener(new MyOnClick());
83
bt_change = findViewById(R.id.bt_change);
84
bt_change.setOnClickListener(new MyOnClick());
85
bt_refer = findViewById(R.id.bt_refer);
86
bt_refer.setOnClickListener(new MyOnClick());
87
bt_add.setOnClickListener(new MyOnClick());
88
lv_studio = findViewById(R.id.lv_studio);
89
90
}
91
92
class MyAdaper extends BaseAdapter{
93
94
95
public int getCount() {
96
return studioInfos.size();
97
}
98
99
100
public StudioInfo getItem(int position) {
101
return studioInfos.get(position);
102
}
103
104
105
public long getItemId(int position) {
106
return position;
107
}
108
109
110
public View getView(int position, View convertView, ViewGroup parent) {
111
View view = null;
112
if(view == null){
113
view = View.inflate(getApplicationContext(),R.layout.list_studio,null);
114
}else{
115
view = convertView;
116
}
117
TextView tv_list_name = view.findViewById(R.id.tv_list_name);
118
TextView tv_list_phone = view.findViewById(R.id.tv_list_phone);
119
String name = getItem(position).getName();
120
tv_list_name.setText(name);
121
String phone = getItem(position).getPhone();
122
tv_list_phone.setText(phone);
123
return view;
124
}
125
}
126
127
class MyOnClick implements View.OnClickListener {
128
129
130
public void onClick(View v) {
131
switch (v.getId()){
132
case R.id.bt_add :
133
dao = StudioDao.getInstance(getApplicationContext());
134
name = et_studio_name.getText().toString().trim();
135
phone = et_studio_phone.getText().toString().trim();
136
dao.add(name,phone);
137
StudioInfo studioinfo = new StudioInfo();
138
studioinfo.setPhone(phone);
139
studioinfo.setName(name);
140
studioInfos.add(studioinfo);
141
myAdaper.notifyDataSetChanged();
142
break;
143
case R.id.bt_refer :
144
dao = StudioDao.getInstance(getApplicationContext());
145
studioInfos = dao.examineAll();
146
int size = studioInfos.size();
147
Log.w(TAG, size+"");
148
break;
149
150
case R.id.bt_cancel:
151
dao = StudioDao.getInstance(getApplicationContext());
152
name = et_studio_name.getText().toString().trim();
153
dao.delest(name);
154
studioInfos = dao.examineAll();
155
myAdaper.notifyDataSetChanged();
156
break;
157
158
case R.id.bt_change:
159
name = et_studio_name.getText().toString().trim();
160
phone = et_studio_phone.getText().toString().trim();
161
dao = StudioDao.getInstance(getApplicationContext());
162
dao.change(name , phone);
163
studioInfos = dao.examineAll();
164
myAdaper.notifyDataSetChanged();
165
166
167
break;
168
169
170
}
171
}
172
}
173
}
174
这样子。和SpUtil一样。能让代码简洁,不比重复
如果有重复或者类似的数据操作,可以写上工具类或者单例模式这样更加方便
阅读全文
0 0
- SharedPreferences和SQLite
- SharedPreferences存储和SQLite存储
- cmd下查看SharedPreferences和SQLite
- Android本地存储:SharedPreferences、SQLite、Content Provider和File
- Android SharedPreferences,Sqlite,ContentProvider,File
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- logback安装
- pwnable 之otp
- Oracle中start withconnect by prior子句用法
- Spring boot 个性化 bannber 设置
- hibernate中boolean的问题
- SharedPreferences和SQLite
- c/c++从编译到执行的过程
- Trie 树
- 计算两个整数的二进制中有几个二进制不同
- Exoplayer+Exomedia打造自定义播放器(二)
- Eclipse自动生成变量名声明(按方法返回值为本地变量赋值)
- R语言学习
- 搭建游戏服务器的问题笔记
- ActiveListManager API
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
白漆皮鞋发黄怎么办
亮漆皮鞋划痕怎么办
鞋穿上脚疼怎么办
鞋子把脚染黑了怎么办
脚上染色洗不掉怎么办
鞋子两边穿着肥怎么办
台灯插头坏了怎么办
淘宝商品有问题怎么办
婚礼素材丢了怎么办
主播直播反光怎么办
开闪光灯照眼睛怎么办
la域名不能备案怎么办
产品权重下降了怎么办
拼多多没权重怎么办?
宝贝权重降了怎么办
python打错了怎么办
python学不懂啊怎么办
蘑菇信用100分怎么办
小宝黄疸高怎么办
买了高位基金怎么办
扣扣号密码忘了怎么办
微信号被替换怎么办
小孩鸡蛋白过敏怎么办
对鸡蛋白过敏怎么办
羊水指数26cm怎么办
羊水指数有点低怎么办
大人高烧38.5度怎么办
大人发烧38.2度怎么办
模特费用不给怎么办
照相机不能拍照了怎么办
红色衣服不红怎么办
拍摄画面过暗怎么办
手机照相机镜头脏了怎么办
单反相机对不了焦怎么办
单反相机聚不了焦怎么办
单反相机对不上焦怎么办
手机拍不了照怎么办
摄影师老了以后怎么办
淘宝卖窗帘配件怎么办
唯品会包裹丢了怎么办
左右脸咬肌不一样大怎么办