簡體   English   中英

for循環在android try-catch塊中不起作用

[英]for-loop doesn't work in android try-catch block

我正在使用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中,完成數據庫的方法是完整的,沒有Exception。 我很好奇這個數據庫是對還是錯。

因此,在第二次try-catch中,我試圖通過查詢檢查領域文件。

問題是“ for-loop”在第二次try-catch中不起作用。 在摘要下方是我的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檢查我的領域數據,但是,如您所見,它不起作用。

如果沒有問題,日志記錄器會顯示我的許多建築物和房間列表,並以“ D / Realm測試: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 < ...

很簡單:沒有拋出異常; 你只需要在循環打印語句。

因此是一個唯一的結論:在執行for循環的那一刻,相應的列表為 因此,不會輸入循環體。 什么都不會打印。 這與該循環位於try-catch塊內無關

這就是全部。 因此,直接的答案是: 直接在循環的前面打印列表大小,以避免出現此類意外情況。

(當然, 有趣的部分是了解列表發生了什么,而該列表在較早時似乎不是空的-但是要進行調試,您必須添加更多代碼)。

兩個輸入:1.尚未使用領域,但看起來用於獲得排序條目的語法有點不同官方文檔

2.如果以上幾點與您的代碼錯誤,則似乎buildingList的大小為零。 您是否嘗試過檢查尺寸?

讓我知道結果。

嘗試記錄您的catch塊。 很有可能是代碼的其余部分,包括循環未完成,因為您的應用程序被異常捕獲。

您應該調試buildingLists.size(); for loop之前

Log.d("Building List Size ", buildingLists.size()+""); 

在這種情況下,您可以找到buildingLists.size();的值buildingLists.size();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM