diff --git a/library/src/main/java/com/owncloud/android/lib/resources/files/ReadFileVersionsRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/files/ReadFileVersionsRemoteOperation.java index c1d74dac02..19b5cbbc8e 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/files/ReadFileVersionsRemoteOperation.java +++ b/library/src/main/java/com/owncloud/android/lib/resources/files/ReadFileVersionsRemoteOperation.java @@ -18,6 +18,7 @@ import org.apache.commons.httpclient.HttpStatus; import org.apache.jackrabbit.webdav.DavConstants; import org.apache.jackrabbit.webdav.MultiStatus; +import org.apache.jackrabbit.webdav.MultiStatusResponse; import org.apache.jackrabbit.webdav.client.methods.PropFindMethod; import org.apache.jackrabbit.webdav.property.DavPropertyNameSet; @@ -112,16 +113,17 @@ protected RemoteOperationResult> run(OwnCloudClient clien * @param client Client instance to the remote server where the data were retrieved. */ private void readData(MultiStatus remoteData, OwnCloudClient client) { - versions = new ArrayList<>(); + MultiStatusResponse[] responses = remoteData.getResponses(); + versions = new ArrayList<>(responses.length); // parse data from remote folder String splitElement = client.getDavUri().getPath(); // loop to update every child - for (int i = 1; i < remoteData.getResponses().length; ++i) { + for (int i = 1; i < responses.length; ++i) { versions.add(new FileVersion( localId, - new WebdavEntry(remoteData.getResponses()[i], splitElement)) + new WebdavEntry(responses[i], splitElement)) ); } } diff --git a/library/src/main/java/com/owncloud/android/lib/resources/files/ReadFolderRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/files/ReadFolderRemoteOperation.java index c4a67c4247..b54217dfdf 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/files/ReadFolderRemoteOperation.java +++ b/library/src/main/java/com/owncloud/android/lib/resources/files/ReadFolderRemoteOperation.java @@ -17,6 +17,7 @@ import org.apache.commons.httpclient.HttpStatus; import org.apache.jackrabbit.webdav.DavConstants; import org.apache.jackrabbit.webdav.MultiStatus; +import org.apache.jackrabbit.webdav.MultiStatusResponse; import org.apache.jackrabbit.webdav.client.methods.PropFindMethod; import java.util.ArrayList; @@ -80,6 +81,10 @@ protected RemoteOperationResult run(OwnCloudClient client) { client.exhaustResponse(query.getResponseBodyAsStream()); result = new RemoteOperationResult(false, query); } + } catch (OutOfMemoryError e) { + mFolderAndFiles = null; + result = new RemoteOperationResult( + new Exception("Not enough memory to read the contents of " + mRemotePath, e)); } catch (Exception e) { result = new RemoteOperationResult(e); } finally { @@ -120,17 +125,20 @@ public boolean isMultiStatus(int status) { * @return */ private void readData(MultiStatus remoteData, OwnCloudClient client) { - mFolderAndFiles = new ArrayList<>(); + MultiStatusResponse[] responses = remoteData.getResponses(); + String davUriPath = client.getFilesDavUri().getEncodedPath(); - // parse data from remote folder - WebdavEntry we = new WebdavEntry(remoteData.getResponses()[0], client.getFilesDavUri().getEncodedPath()); + mFolderAndFiles = new ArrayList<>(responses.length); + + // parse data from remote folder + WebdavEntry we = new WebdavEntry(responses[0], davUriPath); mFolderAndFiles.add(new RemoteFile(we)); // loop to update every child RemoteFile remoteFile; - for (int i = 1; i < remoteData.getResponses().length; ++i) { + for (int i = 1; i < responses.length; ++i) { /// new OCFile instance with the data from the server - we = new WebdavEntry(remoteData.getResponses()[i], client.getFilesDavUri().getEncodedPath()); + we = new WebdavEntry(responses[i], davUriPath); remoteFile = new RemoteFile(we); mFolderAndFiles.add(remoteFile); } diff --git a/library/src/main/java/com/owncloud/android/lib/resources/trashbin/ReadTrashbinFolderRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/trashbin/ReadTrashbinFolderRemoteOperation.java index 98948ab6ac..3cf9ebb7bf 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/trashbin/ReadTrashbinFolderRemoteOperation.java +++ b/library/src/main/java/com/owncloud/android/lib/resources/trashbin/ReadTrashbinFolderRemoteOperation.java @@ -18,6 +18,7 @@ import org.apache.commons.httpclient.HttpStatus; import org.apache.jackrabbit.webdav.DavConstants; import org.apache.jackrabbit.webdav.MultiStatus; +import org.apache.jackrabbit.webdav.MultiStatusResponse; import org.apache.jackrabbit.webdav.client.methods.PropFindMethod; import org.apache.jackrabbit.webdav.property.DavPropertyNameSet; @@ -113,15 +114,16 @@ public RemoteOperationResult> run(OwnCloudClient client) { * @param client Client instance to the remote server where the data were retrieved. */ private void readData(MultiStatus remoteData, OwnCloudClient client) { - folderAndFiles = new ArrayList<>(); + MultiStatusResponse[] responses = remoteData.getResponses(); + folderAndFiles = new ArrayList<>(responses.length); // parse data from remote folder WebdavEntry we; String splitElement = client.getDavUri().getPath(); // loop to update every child - for (int i = 1; i < remoteData.getResponses().length; ++i) { - we = new WebdavEntry(remoteData.getResponses()[i], splitElement); + for (int i = 1; i < responses.length; ++i) { + we = new WebdavEntry(responses[i], splitElement); folderAndFiles.add(new TrashbinFile(we, client.getUserId())); } }