}
- 异步操作:findAllAsync查询(RealmChangeListener)
menList2 = mRealm.where(Men.class)
.findAllAsync();
menList2.addChangeListener(callback);
/**
- 异步操作的监听
*/
private OrderedRealmCollectionChangeListener<RealmResults> callback = new OrderedRealmCollectionChangeListener<RealmResults>() {
@Override
public void onChange(RealmResults collection, OrderedCollectionChangeSet changeSet) {
if (changeSet == null) {
//第一次异步返回一个空的变更集。
for (int i = 0; i < collection.size(); i++) {
Log.d(“huangxiaoguo”, “huangixoaguo==>” +
collection.get(i).getName() + “----” + collection.get(i).getAge());
}
} else {
//每次RealmResults被更新时都会被调用
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (menList2 != null) {
menList2.removeChangeListener(callback);
menList2.removeAllChangeListeners();
}
if (mRealm != null && !mRealm.isClosed()) {
mRealm.close();
}
}
- findFirst :查询第一条数据
Men men = mRealm.where(Men.class).findFirst();
Log.d(“huangxiaoguo”, “huangixoaguo==>” +
men.getName() + “----” + men.getAge());
- equalTo :根据条件单级查询
RealmResults menRealmResults = mRealm.where(Men.class)
.equalTo(“name”, “huangxiaoguo1”).findAll();
for (int i = 0; i < menRealmResults.size(); i++) {
Log.d(“huangxiaoguo”, “huangixoaguo==>” +
menRealmResults.get(i).getName() + “----” + menRealmResults.get(i).getAge());
}
- equalTo :根据条件多级查询
//只能是一对一的表,一对多时,子表查询条件无效
RealmResults people = mRealm.where(Person.class)
.equalTo(“city”, “杭州”)
.equalTo(“men.age”, 20)//这是他的子类Men的属性
.findAll();
for (int i = 0; i < people.size(); i++) {
Log.d(“huangxiaoguo”, “huangixoaguo==>” +
people.get(i).getMen().getName() + “----” +
people.get(i).getMen().getAge());
}
- 聚合
/**
- sum():对指定字段求和。
average():对指定字段求平均值。
min(): 对指定字段求最小值。
max() : 对指定字段求最大值。count : 求结果集的记录数量。
findAll(): 返回结果集所有字段,返回值为RealmResults队列
findAllSorted() : 排序返回结果集所有字段,返回值为RealmResults队列
between(), greaterThan(),lessThan(), greaterThanOrEqualTo() & lessThanOrEqualTo()
equalTo() & notEqualTo()
contains(), beginsWith() & endsWith()
isNull() & isNotNull()
isEmpty()& isNotEmpty()
*/
RealmResults results = mRealm.where(Men.class).findAll();
long sum = results.sum(“age”).longValue();
long min = results.min(“age”).longValue();
long max = results.max(“age”).longValue();
double average = results.average(“age”);
long matches = results.size();
Log.d(“huangxiaoguo”, “sum=” + sum + “,min=” + min + “,max=” + max +
“,average=” + average + “,matches=” + matches);
- or的使用
RealmResults menList2 = mRealm.where(Men.class)
.equalTo(“name”, “huangxiaoguo0”)
.or().equalTo(“name”, “huangxiaoguo2”)
.findAll();
for (int i = 0; i < menList2.size(); i++) {
Log.d(“huangxiaoguo”, “name=” + menList2.get(i).getName() +
“,age=” + menList2.get(i).getAge());
}
- 排序
RealmResults menList3 = mRealm.where(Men.class).findAll();
menList3 = menList3.sort(“age”); //根据age,正序排列
for (int i = 0; i < menList3.size(); i++) {
Log.d(“huangxiaoguo”, “name=” + menList3.get(i).getName() +
“,age=” + menList3.get(i).getAge());
}
menList3 = menList3.sort(“age”, Sort.DESCENDING);//逆序排列
for (int i = 0; i < menList3.size(); i++) {
Log.d(“huangxiaoguo”, “name=” + menList3.get(i).getName() +
“,age=” + menList3.get(i).getAge());
}
- 区间查询
RealmResults menList4 = mRealm.where(Men.class)
.between(“age”, 0, 30)
.findAll();
for (int i = 0; i < menList4.size(); i++) {
Log.d(“huangxiaoguo”, “name=” + menList4.get(i).getName() +
“,age=” + menList4.get(i).getAge());
}
Demo地址:https://gitee.com/huangxiaoguo/Realm
activity全部代码如下:
package tsou.com.simple.realmtest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
import io.realm.OrderedCollectionChangeSet;
import io.realm.OrderedRealmCollectionChangeListener;
import io.realm.Realm;
import io.realm.RealmResults;
import io.realm.Sort;
import tsou.com.simple.realmtest.adapter.MyAdapter;
import tsou.com.simple.realmtest.bean.Men;
import tsou.com.simple.realmtest.bean.Person;
import tsou.com.simple.realmtest.utils.UIUtils;
public class QueryActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private ListView mListview;
private List titles = new ArrayList<>();
private Realm mRealm;
private RealmResults menList2;
@Override
protected void onDestroy() {
super.onDestroy();
if (menList2 != null) {
menList2.removeChangeListener(callback);
menList2.removeAllChangeListeners();
}
if (mRealm != null && !mRealm.isClosed()) {
mRealm.close();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
mRealm = UIUtils.getRealmInstance();
initData();
initView();
initListener();
}
private void initData() {
titles.add(“同步操作:findAll查询”);
titles.add(“异步操作:findAllAsync查询(isLoaded)”);
titles.add(“异步操作:findAllAsync查询(RealmChangeListener)”);
titles.add(“findFirst :查询第一条数据”);
titles.add(“equalTo :根据条件单级查询”);
titles.add(“equalTo :根据条件多级查询”);
titles.add(“聚合”);
titles.add(“or的使用”);
titles.add(“排序”);
titles.add(“区间查询”);
}
private void initView() {
mListview = (ListView) findViewById(R.id.listview);
mListview.setAdapter(new MyAdapter(this, titles));
}
private void initListener() {
mListview.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
switch (position) {
default:
break;
case 0://同步操作:findAll查询
/**
-
注意:RealmResults虽然实现了List接口,不过有很多方法是不能用的。
-
比如add、addAll、remove、clear等,
-
调用后会直接抛异常。
-
因为它们都被标记为@Deprecated了。
*/
RealmResults menList = mRealm.where(Men.class)
.findAll();
for (int i = 0; i < menList.size(); i++) {
Log.d(“huangxiaoguo”, “huangixoaguo==>” +
menList.get(i).getName() + “----” + menList.get(i).getAge());
}
break;
case 1://异步操作:findAllAsync查询(isLoaded)
RealmResults menList1 = mRealm.where(Men.class)
.findAllAsync();
menList1.load();//等到查询完成。这将阻塞该线程,使查询再次同步
if (menList1 != null && menList1.isLoaded()) {
for (int i = 0; i < menList1.size(); i++) {
Log.d(“huangxiaoguo”, “huangixoaguo==>” +
menList1.get(i).getName() + “----” + menList1.get(i).getAge());
}
}
break;
case 2://异步操作:findAllAsync查询(RealmChangeListener)
menList2 = mRealm.where(Men.class)
.findAllAsync();
menList2.addChangeListener(callback);
break;
case 3://findFirst :查询第一条数据
Men men = mRealm.where(Men.class).findFirst();
Log.d(“huangxiaoguo”, “huangixoaguo==>” +
men.getName() + “----” + men.getAge());
break;
case 4://equalTo ——根据条件单级查询
RealmResults menRealmResults = mRealm.where(Men.class)
.equalTo(“name”, “huangxiaoguo1”).findAll();
for (int i = 0; i < menRealmResults.size(); i++) {
Log.d(“huangxiaoguo”, “huangixoaguo==>” +
menRealmResults.get(i).getName() + “----” + menRealmResults.get(i).getAge());
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
推荐学习资料
- 脑图
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
片转存中…(img-moimJMxb-1713404758675)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
推荐学习资料
- 脑图
[外链图片转存中…(img-yIZb8fvS-1713404758676)]
[外链图片转存中…(img-cxw1IPoN-1713404758677)]
[外链图片转存中…(img-nW08PuE3-1713404758678)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!