Realm查询结果显示为Proxy对象,如何让TextView仅展示数字?
解决Realm查询结果显示Proxy对象而非目标数字的问题
嘿,这问题我熟!你看到的[dbRealm = proxy[{points:[1]}]]其实是Realm动态生成的代理对象的默认toString输出,咱们只要拿到真实的points字段值就行,给你几个具体的解决步骤:
1. 确保你的Realm实体类有正确的Getter方法
首先,你的Realm模型类(比如存储points的那个类)必须提供public的getter方法,Realm的代理对象会通过这个方法返回真实的数据库值:
public class ScoreModel extends RealmObject { private int points; // 必须要有这个public的getter public int getPoints() { return points; } // 可选:如果需要修改数据的话加上setter public void setPoints(int points) { this.points = points; } }
2. 获取查询结果时调用Getter提取数值
不管你是单个对象还是列表,都不要直接用对象的toString,而是调用getPoints()拿到数字,再转成字符串显示到TextView:
// 假设你已经拿到了Realm查询结果RealmResults<ScoreModel> results // 单个对象的情况(比如点击对应位置的条目) ScoreModel currentModel = results.get(currentIndex); // currentIndex是你当前点击的索引 int targetPoints = currentModel.getPoints(); yourTextView.setText(String.valueOf(targetPoints)); // 如果是要拼接多个结果(比如你说的依次追加显示) StringBuilder displayText = new StringBuilder(); for (ScoreModel model : results) { displayText.append(model.getPoints()).append(", "); } // 去掉最后多余的逗号和空格 if (displayText.length() > 0) { displayText.setLength(displayText.length() - 2); } yourTextView.setText(displayText.toString());
为啥会出现Proxy格式?
Realm为了实现懒加载和数据实时更新,会给每个RealmObject生成动态代理类(就是你看到的Proxy),直接打印这个对象的话,显示的是代理类的内部结构,而通过getter方法,Realm会帮你从数据库中取出真实的字段值,这样就能得到你想要的数字啦~
内容的提问来源于stack exchange,提问作者user9412863
相关产品推荐
相关产品推荐

