SharedPreferences和SQLite

在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
    @Override
27
    protected void onCreate(@Nullable 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
            @Override
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
    @Override
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
        @Override
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
    @Override
18
    public void onCreate(SQLiteDatabase db) {
19
        db.execSQL(SQL);
20
    }
21
22
    @Override
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
        @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一样。能让代码简洁,不比重复

如果有重复或者类似的数据操作,可以写上工具类或者单例模式这样更加方便
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值