猿问

方法退出时新的 ArrayList 对象消失

你好,提前致谢。我在这里相对较新,到目前为止我已经能够解决我在搜索中遇到的任何问题,但这个问题让我很难过。


我正在编写一个程序,该程序使用 Rest-Assured 进行 API 调用以获取云服务器中不同对象的配置文件。这些对象是我们可以称为文件夹的组织文件容器。这些文件夹具有特定的结构,每个文件夹都有特定的元数据配置文件。我的程序所做的是从返回的 JSON 创建 java 对象,并以允许它们仍然像文件夹结构一样工作的方式存储它们,以便可以操纵它们来执行以下操作:打印文件夹结构,获取特定文件夹的子文件夹文件夹、查看特定文件夹的名称或 ID、添加或删除文件夹等。


我已将其设置为每个文件夹都是一个对象,其中包含其子文件夹的 ArrayList 和元数据变量,其中构造函数将基于 JSON 填充所有变量。


在使用我的递归方法调用 API 并在它们应该去的地方添加子文件夹之后,在类内部的方法中,我可以看到它们被正确添加,一旦方法退出,如果我尝试从 Main 访问列表我得到一个空指针异常。请参阅下面的代码示例。


编辑:我在下面的代码中添加了额外的测试,以检查递归方法中的数组索引是否为空。创建对象时,构造函数使用 打印文件夹 ID 和 ArrayList 中的索引indexOf()。当它从构造函数返回时,在相同的递归方法中,getSingleFolder(index).getSubfolders().get(0).getSubfolders().get(0).toString仍然为空,即使这应该返回刚创建并从构造函数中添加到父文件夹 ArrayList(并验证)的同一文件夹。


        public void saveSubfoldersRecursively(Folder folder){

        if (folder.hasSubfolders()){

            getFolderSubfoldersJsonArrayFromRestApi(folder);


            for(int x = 0; x < folder.getFoldersJsonArray().size(); x++) {

                JsonObject currentSubfolderJson = folder.getFoldersJsonArray().get(x).getAsJsonObject();

                JsonObject fullSubfolderProfileObject = getFolderProfileFromRestApi(currentSubfolderJson);

                Folder newSubfolder = folder.addSubfolder(fullSubfolderProfileObject);


                if (newSubfolder.hasSubfolders()) {

                    saveSubfoldersRecursively(newSubfolder);

                }

            }

            if (folder.getId().equals("<folderID>") ) {

                System.out.println("inside saveSubfoldersRecursively");  // this prints fine

// Null Pointer Exception at next line!

                System.out.println("access test 1: " + folder.getId() + " subfolder at index 0: " + folder.getSubFolders().get(0)); 

        }

    }



拉风的咖菲猫
浏览 129回答 2
2回答
随时随地看视频慕课网APP

相关分类

Java
我要回答