寫了2天的代碼,總結一下這兩天的一些積累
realm簡單來說就是一個可以代替sql的數據庫, 特點:易用,快速,跨平臺,專業(支持加密,格式化查詢,易於移植,支持JSON,流式api,數據變更通知), 可視化
官方網站 https://realm.io/docs/java/latest/ 有需要的朋友,可以去看看
代碼:
1、配置
在最外面的那層build.gradle 配置這一段代碼
classpath "io.realm:realm-gradle-plugin:5.8.0"
然後在app文件裏面的build.gradle 配置這一段代碼
apply plugin: 'realm-android'
1、佈局
3、代碼
3.1創建一個需要保存數據庫的類,我寫了兩個
import io.realm.RealmObject;
/**
* @author Admin
* https://realm.io/docs/java/latest/
*/
public class Dog extends RealmObject {
String name;
String age;
String aihao;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAihao() {
return aihao;
}
public void setAihao(String aihao) {
this.aihao = aihao;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", aihao='" + aihao + '\'' +
'}';
}
}
import io.realm.RealmList;
import io.realm.RealmObject;
/**
* @author Admin
* https://realm.io/docs/java/latest/
*/
public class MyRealmDemo extends RealmObject {
String userName;
String pwd;
Long sessionId;
private RealmList<Integer> Remarks = new RealmList<>();
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Long getSessionId() {
return sessionId;
}
public void setSessionId(Long sessionId) {
this.sessionId = sessionId;
}
public RealmList<Integer> getRemarks() {
return Remarks;
}
public void setRemarks(RealmList<Integer> remarks) {
Remarks = remarks;
}
@Override
public String toString() {
return "MyRealmDemo{" +
"userName='" + userName + '\'' +
", pwd='" + pwd + '\'' +
", sessionId=" + sessionId +
", Remarks=" + Remarks.size() +
'}';
}
}
3.2 創建一個Application,在onCreate裏面進行初始化
import io.realm.Realm;
import io.realm.RealmConfiguration;
/**
* @author Admin
*/
public class MyApplication extends Application {
public static RealmConfiguration config;
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
config = new RealmConfiguration.Builder()
.name("myRealm.realm")
.deleteRealmIfMigrationNeeded()
.build();
Realm.setDefaultConfiguration(config);
//配置默認的數據庫
//setDefaultConfiguration(new RealmConfiguration.Builder().build());
// RealmConfiguration configuration = new RealmConfiguration.Builder().build();
}
}
3.3 主界面的實現代碼
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import io.realm.Realm;
import io.realm.RealmAsyncTask;
import io.realm.RealmResults;
/**
* @author Admin
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView txtShow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initRealm();
txtShow = findViewById(R.id.txt_show);
findViewById(R.id.btn_add).setOnClickListener(this);
findViewById(R.id.btn_search).setOnClickListener(this);
findViewById(R.id.btn_delete).setOnClickListener(this);
findViewById(R.id.btn_update).setOnClickListener(this);
}
Realm realm;
Integer index = 0;
RealmAsyncTask transaction;
private void initRealm() {
realm = Realm.getInstance(MyApplication.config);
}
/**
* 升級數據庫
*/
// class CustomMigration implements RealmMigration {
// @Override
// public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
// RealmSchema schema = realm.getSchema();
// Log.e("MainActivity", "oldVersion:" + oldVersion + "----newVersion" + newVersion);
// if (oldVersion == 1 && newVersion == 2) {
// RealmObjectSchema personSchema = schema.get("Dog");
//
//// if (!personSchema.hasField("Dog")) {
//// personSchema.addField("aihao", String.class, FieldAttribute.REQUIRED);
//// oldVersion++;
//// }
//
// }
// }
// }
private void addRealm() {
transaction = realm.executeTransactionAsync(realm -> {
MyRealmDemo myDemo = realm.createObject(MyRealmDemo.class);
myDemo.setUserName("名字");
myDemo.setPwd(index + "");
myDemo.getRemarks().add(index);
index++;
}, () -> {
//成功回調
Log.e("MainActivity", "成功回調" + index);
}, error -> {
//失敗回調
Log.e("MainActivity", "失敗");
});
transaction = realm.executeTransactionAsync(realm -> {
Dog dog = realm.createObject(Dog.class);
dog.setName("哈士奇");
dog.setAge(index + "歲");
dog.setAihao("拆家" + index);
}, () -> {
//成功回調
Log.e("MainActivity", "成功回調" + index);
}, error -> {
//失敗回調
Log.e("MainActivity", "失敗");
});
}
private void updateRealm() {
transaction = realm.executeTransactionAsync(realm -> {
RealmResults<MyRealmDemo> myList = realm.where(MyRealmDemo.class).findAll();
if (myList != null && myList.size() > 0) {
MyRealmDemo myDemo = myList.get(0);
myDemo.setUserName("換名字");
myDemo.setPwd("小球不得");
myDemo.getRemarks().add(index);
index++;
} else {
Log.e("MainActivity", "updateRealm沒得東西,改毛線" + index);
Toast.makeText(this, "updateRealm沒得東西,改毛線", Toast.LENGTH_SHORT).show();
}
}, () -> {
//成功回調
Log.e("MainActivity", "成功回調" + index);
}, error -> {
//失敗回調
error.printStackTrace();
Log.e("MainActivity", "失敗" + error.getMessage());
});
}
private void deleteRealm() {
transaction = realm.executeTransactionAsync(realm -> {
RealmResults<MyRealmDemo> myList = realm.where(MyRealmDemo.class).findAll();
//刪除第一個數據
myList.get(0).deleteFromRealm();
// myList.deleteFirstFromRealm();
// //刪除最後一個數據
// myList.deleteLastFromRealm();
// //刪除位置爲1的數據
// myList.deleteFromRealm(1);
// //刪除所有數據
// myList.deleteAllFromRealm();
}, () -> {
//成功回調
Log.e("MainActivity", "deleteRealm刪球了" + index);
}, error -> {
//失敗回調
Log.e("MainActivity", "deleteRealm沒刪拖");
});
}
private void searchRealm() {
RealmResults<MyRealmDemo> myList = realm.where(MyRealmDemo.class).findAll();
String strText = "";
if (myList != null && myList.size() > 0) {
for (MyRealmDemo myRealmDemo : myList) {
strText += "\n看什麼玩意嘛:" + myRealmDemo.toString();
Log.e("MainActivity", "看什麼玩意嘛:" + myRealmDemo.toString());
for (int intNum : myRealmDemo.getRemarks()) {
strText += "\n數組裏的東西:" + intNum;
Log.e("MainActivity", "數組裏的東西:" + intNum);
}
}
} else {
Log.e("MainActivity", "空的,代碼錯了,看錘子");
}
RealmResults<Dog> dogList = realm.where(Dog.class).findAll();
for (Dog dog : dogList) {
strText += "\n我的狗:" + dog.toString();
Log.e("MainActivity", "我的狗:" + dog.toString());
}
txtShow.setText(strText);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_add:
//添加
addRealm();
break;
case R.id.btn_search:
//查詢
searchRealm();
break;
case R.id.btn_delete:
//刪除
deleteRealm();
break;
case R.id.btn_update:
//修改
updateRealm();
break;
default:
break;
}
}
@Override
protected void onStop() {
super.onStop();
//取消當前的數據庫操作狀態
if (transaction != null && !transaction.isCancelled()) {
transaction.cancel();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//關閉連接
realm.close();
}
}
效果圖: