java - for循环在android try-catch block 中不起作用

标签 java android for-loop try-catch realm

我正在使用 Realm 制作学校建筑和教室的数据库。但是,try-catch 中的“for-loop”不起作用:

public void startCheckRealm() {
    // Writing DataBase with Realm
    try {
        Log.d("Realm", "Init");
        InitializeAPI.init_BuildingRoom(getActivity().getApplicationContext());
        Log.d("Realm", "Complete");
    } catch(Exception e) {
        e.printStackTrace();
    }

    // Trying to check the Database whether it is right or wrong
    try {
        Log.d("Realm Test", "2nd Try Catch");

        Realm.init(getActivity().getApplicationContext());
        Realm realm = Realm.getDefaultInstance();

        RealmResults<BuildingList> buildingLists = realm.where(BuildingList.class).findAllSorted("buildingCode");

        int totalNumber = 0;

        for(int i = 0; i < buildingLists.size(); i++) {
            Log.d("For", "index = " + i);
            RealmResults<RoomList> rooms = buildingLists.get(i).getRoomList().sort("roomCode");

            String BuildingName = buildingLists.get(i).getBuildingName();
            String BuildingCode = buildingLists.get(i).getBuildingCode();

            for(int idx = 0; idx < rooms.size(); idx++) {
                totalNumber++;
                String RoomCode = rooms.get(idx).getRoomCode();
                String RoomName = rooms.get(idx).getRoomName();

                Log.d("Realm Test", "Number :: " + String.valueOf(totalNumber) + "   BuildingCode :: " + BuildingCode + "\t\t BuildingName :: " + BuildingName + "\t\t RoomCode :: " + RoomCode + "\t\t RoomName :: " + RoomName);
            }
        }
        Log.d("Realm Test", "2nd Try Catch Complete + " + String.valueOf(totalNumber));
    } catch(RealmException e) {
        e.printStackTrace();
    }
}

在第一个try-catch中,创建数据库的方法没有异常就完成了。我很好奇这个数据库是对还是错。

因此,在第二次 try-catch 中,我试图通过查询检查 Realm 文件。

问题是“for-loop”在第二次 try-catch 中不起作用。下面的 fragment 是我的 logcat。

D/Realm: Init
I/System.out: bdList getLength :: 52
I/System.out: roomList getLength :: 2376
D/Realm: Complete
D/Realm Test: 2nd Try Catch
D/Realm Test: 2nd Try Catch Complete + 0

我想用 Log 检查我的 Realm 数据,但如您所见,它不起作用。

如果没有问题,logcat 会显示我的许多建筑和房间列表,并以“D/Realm Test: 2nd Try Catch Complete + 2376”结束。

您能解释一下它不起作用的原因吗?我不明白为什么即使没有异常它也不起作用。

最佳答案

虽然在您的用例中这不会造成问题,但当您在事务中迭代 RealmResults 时,结果在 <= 0.88.3 和 >= 3.0.0 的每个版本中都有效。

那么在那种情况下,

    RealmResults<BuildingList> buildingLists = realm.where(BuildingList.class).findAllSorted("buildingCode");
    for(int i = 0; i < buildingLists.size(); i++) {
        BuildingList buildingList = buildingLists.get(i); // <-- !!!

会失败(它会跳过第二个项目!)

所以你应该改用迭代器(3.0.0+!在 <= 0.88.3 上你会做反向迭代)

    RealmResults<BuildingList> buildingLists = realm.where(BuildingList.class).findAllSorted("buildingCode");
    for(BuildingList buildingList : buildingLists) { // <-- !!!

之所以可行,是因为迭代器默认创建一个新的快照集合 (3.0.0+),并且在快照上按索引迭代也是可行的

OrderedRealmCollection<BuildingList> snapshot = buildingLists.createSnapshot();
for(int i = 0; i < ...

关于java - for循环在android try-catch block 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43842755/

相关文章:

java - 返回什么类型?

java - 在我的 JSP 中引用 Java 的最佳实践

java - 克隆具有相同对象属性的 Java 对象

java - Android java.lang.IllegalArgumentException : Duplicate key in ArrayMap: null

java - 使用 SQLiteQueryBuilder 生成 UPDATE 查询

android - ionic cordova camera.getPicture 什么都不返回

batch-file - For 循环解析路径中带有空格的文件,命令提示符

java - 私有(private)、 protected 访问修饰符和抽象之间的区别

javascript - JavaScript 中的列表到数组

javascript - 使用循环和函数 javascript 将文本更改为驼峰式大小写