編輯:關於Android編程
說到Android中的數據存儲方式,聽人說有5種 其實具體有幾種寡人不甚清楚,無所謂,愛有幾種要幾種
讓我來縷一縷到底有幾種方式吧 shit
回顧一下android中數據存儲的方式有很多種:
(1) SharePreferences 通過api進行get、put操作 ----進程內部使用,可以實現資源共享,局限性比較大
可以參考:SharedPreference 實現不同進程間的數據共享
(2) 通過file進行一些輸入輸出流控制 ----能實現進程間的共享,但是使用比較麻煩,個人不太喜歡用
(3) 通過SQLite進行數據庫的讀寫 ----進程內部使用,可以實現資源共享,局限性比較大
(4) ContentProvider 進行數據的存儲 ----可以實現進程間的共享,可以和SQLite配合使用(當然也可以用其他幾個存儲方式,稍後補充上實例),一般實現的是大型數據操作
(5) 網絡存儲數據 ----比較麻煩,有局限性
(6) system.prop 也可以進行簡單的數據存儲 ----有局限性,有default值,可以臨時修改,重啟後就會恢復默認值或重新設置
//這個是網上蕩來的,我並不清楚,也沒有用過,,有時間百度一下
使用ContentProvider共享數據的好處是統一了數據訪問方式,可以存儲 一些圖片等的數據。而這些其他是有局限性的。
本篇文章講述如何利用Android內置數據庫sqlite進行數據的存儲
說到數據庫就要說到SQLiteOpenHelper這個類了,在Android開發中利用SQLiteOpenHelper實現數據庫的增刪改查操作
讓我們看看如何實例化這個類
/**
*
* Created by xuenan on 2016/3/17.
*/
public class PersonDbOpenHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "mysql.db";
private static final String TABLE_NAME = "person";
private static final int DATABASE_VERSION = 1;
private SQLiteDatabase mDb;
public PersonDbOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mDb = getWritableDatabase();
}
// 當數據庫第一創建的時候調用
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + " (_id INTEGER PRIMARY KEY, name TEXT, age INTEGER, height REAL)");
}
// 當數據庫版本更新的時候調用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE person ADD COLUMN sex TEXT");
}
/**
* 插入一條數據
* @param person
* @return
*/
public long insert(Person person) {
ContentValues values = new ContentValues();
values.put("name", person.getName());
values.put("age", person.getAge());
values.put("height", person.getHeight());
//public long insert (String table, String nullColumnHack, ContentValues values)
//table:表名;
//nullColumnHack:設置為null;
//valuse:你要插入的值,類型為ContentValues。
return mDb.insert(TABLE_NAME, null, values);
}
/**
* 查詢所有
* @return
*/
public List
主要的方法就是增刪改查,當然還有一個創建一個數據庫和表
類創建完之後就是使用了,上邊看到了,為了方便,我們使用了一個person類
public class Person {
private int id;
private String name;
private int age;
private float height;
public Person() {
}
public Person(int id, String name, int age, float height) {
super();
this.id = id;
this.name = name;
this.age = age;
this.height = height;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
@Override
public String toString() {
return "id="+id+"--"+"name="+name+"--"+"age="+age+"--"+"height="+height;
}
}
方法在Activity中的使用
public class MainActivity extends AppCompatActivity {
private EditText nameBox, ageBox, heightBox, idBox;
private TextView showText;
private PersonDbOpenHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
nameBox = (EditText) findViewById(R.id.editText_name);
ageBox = (EditText) findViewById(R.id.editText_age);
heightBox = (EditText) findViewById(R.id.editText_height);
idBox = (EditText) findViewById(R.id.editText_id);
showText = (TextView) findViewById(R.id.textView_show);
// 生成Helper對象
dbHelper = new PersonDbOpenHelper(this);
}
/*
* 注意:因沒有進行容錯處理,需要正確輸入數據,否則會報異常
*/
public void buttonClick(View v) {
Person p;
switch(v.getId()) {
//插入一條數據
case R.id.button_addData:
String age = ageBox.getText().toString().trim();
String height = heightBox.getText().toString().trim();
String name = nameBox.getText().toString().trim();
p = new Person();
if((StringUtils.isEmpty(age))||(StringUtils.isEmpty(height))||(StringUtils.isEmpty(name))){
Toast.makeText(MainActivity.this,"請輸入完整",Toast.LENGTH_SHORT).show();
return;
}
if(!StringUtils.isUsualCharacter(name)){
Toast.makeText(MainActivity.this,"請輸入平常字符",Toast.LENGTH_SHORT).show();
return;
}
if(!StringUtils.isNumeric(age)){
Toast.makeText(MainActivity.this,"請輸入整數",Toast.LENGTH_SHORT).show();
return;
}
p.setAge(Integer.parseInt(age));
p.setHeight(Float.parseFloat(height));
p.setName(name);
dbHelper.insert(p);
break;
//查詢所有
case R.id.button_showAll:
List> list = dbHelper.queryAll();
showText.setText(list.toString());
break;
//清楚顯示數據
case R.id.button_clear:
showText.setText(null);
break;
//刪除所有數據
case R.id.button_deleteAll:
dbHelper.deleteAll();
break;
//根據id進行查找
case R.id.button_queryById:
String id = idBox.getText().toString().trim();
if(!StringUtils.isNumeric(id)){
Toast.makeText(MainActivity.this,"請輸入數字",Toast.LENGTH_SHORT).show();
return;
}
p = dbHelper.queryById(Integer.parseInt(id));
showText.setText(p.toString());
break;
//根據id進行更新
case R.id.button_updateById:
String age_update = ageBox.getText().toString().trim();
String height_update = heightBox.getText().toString().trim();
String name_update = nameBox.getText().toString().trim();
String id_update = idBox.getText().toString().trim();
p = new Person();
if((StringUtils.isEmpty(age_update))||(StringUtils.isEmpty(height_update))||(StringUtils.isEmpty(name_update))){
Toast.makeText(MainActivity.this,"請輸入完整",Toast.LENGTH_SHORT).show();
return;
}
if(!StringUtils.isNumeric(id_update)){
Toast.makeText(MainActivity.this,"請輸入數字",Toast.LENGTH_SHORT).show();
return;
}
if(!StringUtils.isUsualCharacter(name_update)){
Toast.makeText(MainActivity.this,"請輸入平常字符",Toast.LENGTH_SHORT).show();
return;
}
if(!StringUtils.isNumeric(age_update)){
Toast.makeText(MainActivity.this,"請輸入整數",Toast.LENGTH_SHORT).show();
return;
}
p.setAge(Integer.parseInt(age_update));
p.setHeight(Float.parseFloat(height_update));
p.setName(name_update);
p.setId(Integer.parseInt(id_update));
dbHelper.updateById(p);
break;
//根據id進行刪除
case R.id.button_deleteById:
String id_delete = idBox.getText().toString().trim();
if(!StringUtils.isNumeric(id_delete)){
Toast.makeText(MainActivity.this,"請輸入數字",Toast.LENGTH_SHORT).show();
return;
}
dbHelper.deleteById(Integer.parseInt(id_delete));
break;
}
}
}
//為了防止插入數據報錯,進行了容錯處理
1. 產品概述 友盟社會化組件,可以讓移動應用快速具備社會化分享、登錄、評論、喜歡等功能,並提供實時、全面的社會化數據統計分析服務。 指南將會手把手教你使用社
手機分辨率基礎知識(DPI,DIP計算)1.術語和概念術語說明備注Screen size(屏幕尺寸)指的是手機實際的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸
這是翻譯官方的文檔,英語好的可以直接去官方文檔查看,英語不好,大家就將就看吧,算是我翻譯的第一篇技術文章,因為是個英語渣,技術也渣,所以最近在學英語,就嘗試著自己來翻譯
Android實習札記(8)---ViewPager+Fragment實例講解 在札記(5)中我們就說過要弄一個模仿微信頁面切換的東東,就是V