SharedPreferences和SQLite

来源:互联网 发布:程序员用什么画流程图 编辑:程序博客网 时间:2024/06/16 06:42
在Android存在中有两个和很重要的存储方式,一个是XML一个是数据库。
下面我就来介绍一下这样两个工具,SharedPreferences和SQLite
用着两个存储,我建议大家用工具类的方法进行操作。这样能让代码更加简洁和更好操作

下面我写一个小例子:
用SharedPreferences进行XML存储,注册账号和密码并且记上相关信息
用SQLite存储studio表。对其进行增删改查


下面开始写了。先创建两个工具类。放在utility文件夹下
 通过这个工具类类,使用静态方法,更加方便数据的存储
再创建标签使用的类。
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
SpUtil.putString(getApplicationContext(),ConstanValue.SEX,sex);
下面是登录

读取数据就变得简单。适合所有String类型的存储。如果需要其他类型的存储之需要修改类型即可
1
SpUtil.getString(getApplicationContext(), ConstanValue.PWQ,"没有");
大家可以试着写出。所有数据的界面。用SpUtil读取出来

然后下面介绍SQLite
 要玩成就是这么一个界面

操作数据库首先要有一个数据库。
创建一个数据库
然后再创建一个数据库操作的单例模式

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
        @Override
39
        public void handleMessage(Message msg) {
40
            myAdaper = new MyAdaper();
41
            lv_studio.setAdapter(myAdaper);
42
        }
43
    };
44
45
    @Override
46
    protected void onCreate(@Nullable 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
            @Override
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
        @Override
95
        public int getCount() {
96
            return studioInfos.size();
97
        }
98
99
        @Override
100
        public StudioInfo getItem(int position) {
101
            return studioInfos.get(position);
102
        }
103
104
        @Override
105
        public long getItemId(int position) {
106
            return position;
107
        }
108
109
        @Override
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
        @Override
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
原创粉丝点击