SharedPreferences和SQLite

在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一樣。能讓代碼簡潔,不比重複

如果有重複或者類似的數據操作,可以寫上工具類或者單例模式這樣更加方便
閱讀更多
想對作者說點什麼? 我來說一句

沒有更多推薦了,返回首頁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章