SharedPreferences和SQLite,sharedpreferences
在Android存在中有两个和很重要的存储方式,一个是XML一个是数据库。 下面我就来介绍一下这样两个工具,SharedPreferences和SQLite 用着两个存储,我建议大家用工具类的方法进行操作。这样能让代码更加简洁和更好操作下面我写一个小例子: 用SharedPreferences进行XML存储,注册账号和密码并且记上相关信息 用SQLite存储studio表。对其进行增删改查
下面开始写了。先创建两个工具类。放在utility文件夹下 1
import android.content.Context;2import android.content.SharedPreferences;34/**5 * Created by YacaToy on 2017/7/1.6 *7 * SharedPreferences工具8 *9 */10public class SpUtil {1112 private static SharedPreferences sp;1314 /**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 }2526 /**27 *28 * @param context 上下文29 * @param key 存储节点的名称30 * @param defValue 默认值或者此节点读取到的结果31 * @return32 */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 }394041} 通过这个工具类类,使用静态方法,更加方便数据的存储再创建标签使用的类。/**
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中
1import android.app.Activity;2import android.os.Bundle;3import android.support.annotation.IdRes;4import android.support.annotation.Nullable;5import android.util.Log;6import android.view.View;7import android.widget.Button;8import android.widget.EditText;9import android.widget.RadioButton;10import android.widget.RadioGroup;11import android.widget.Toast;1213import toy.yacatool.com.myappspandsql.R;14import toy.yacatool.com.myappspandsql.utility.ConstanValue;15import toy.yacatool.com.myappspandsql.utility.SpUtil;1617/**18 * Created by YacaToy on 2017/7/1.19 */2021public 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();3132 }3334 /**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);44454647 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 }5657 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 }6364 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 }7071 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 }7778 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();8788 }8990 });9192 }939495}1
SpUtil.putString(getApplicationContext(),ConstanValue.SEX,sex);
下面是登录
1import android.content.Intent;2import android.support.v7.app.AppCompatActivity;3import android.os.Bundle;4import android.view.View;5import android.widget.Button;6import android.widget.EditText;7import android.widget.Toast;89import toy.yacatool.com.myappspandsql.R;10import toy.yacatool.com.myappspandsql.utility.ConstanValue;11import toy.yacatool.com.myappspandsql.utility.SpUtil;1213public 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 }3233 class myClink implements View.OnClickListener{3435 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));4142 break;43 //登录44 case R.id.bt_log:45 String number = SpUtil.getString(getApplicationContext(), ConstanValue.NUMBER,"没有");4647 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));5152 }else{53 Toast.makeText(getApplicationContext(),"请输入正确密码",Toast.LENGTH_SHORT).show();54 }55 }else{56 Toast.makeText(getApplicationContext(),"没有该账号",Toast.LENGTH_SHORT).show();57 }585960 break;61 }62 }63 }6465}661
SpUtil.getString(getApplicationContext(), ConstanValue.PWQ,"没有");
大家可以试着写出。所有数据的界面。用SpUtil读取出来
然后下面介绍SQLite 要玩成就是这么一个界面
操作数据库首先要有一个数据库。
1
import android.content.Context;2import android.database.sqlite.SQLiteDatabase;3import android.database.sqlite.SQLiteOpenHelper;45/**6 * Created by YacaToy on 2017/7/2.7 */89public class StudioOpenHelper extends SQLiteOpenHelper {10 private final String SQL = "create table studio (_id integer primary key autoincrement" +11 " , name varchar(50),phone varchar(20));";1213 public StudioOpenHelper(Context context) {14 super(context, "studio.db", null, 1);15 }1617 18 public void onCreate(SQLiteDatabase db) {19 db.execSQL(SQL);20 }2122 23 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {2425 }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一样。能让代码简洁,不比重复
如果有重复或者类似的数据操作,可以写上工具类或者单例模式这样更加方便
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。