Größe Dateien Error crasht die App

wer112

Top Contributor
Ich wollte prüfen, ob man Videos über VollyMultipartRequest hochladen kann.

Ich bekomme diese Antwort:
Java:
java.lang.OutOfMemoryError: Failed to allocate a 268435472 byte allocation with 25165824 free bytes and 122MB until OOM, target footprint 165068912, growth limit 268435456
                                                                                                        at java.util.Arrays.copyOf(Arrays.java:3161)
                                                                                                        at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118)
                                                                                                        at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
                                                                                                        at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
                                                                                                        at com.andrealfredklug.klugstore.Konsole.App_spenden.getArrayFromZip(App_spenden.java:514)
                                                                                                        at com.andrealfredklug.klugstore.Konsole.App_spenden$3$3.getByteData(App_spenden.java:477)
                                                                                                        at com.andrealfredklug.klugstore.Volley.VolleyMultipartRequest.getBody(VolleyMultipartRequest.java:61)
                                                                                                        at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:283)
                                                                                                        at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:257)
                                                                                                        at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:89)
                                                                                                        at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:104)
                                                                                                        at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:132)
                                                                                                        at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)
                                                                                                        at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
---------------------------- PROCESS ENDED (26223) for package com.andrealfredklug.klugstore ----------------------------

Wie kann ich den Crash verhindern und eine Fehlermeldung anzeigen lassen, wenn die Datei zu groß ist?

Ich danke schon mal für eure Lösung.
 

KonradN

Super-Moderator
Mitarbeiter
Hatten wir das Thema nicht schon in der Vergangenheit? Ganz offensichtlich versuchst Du die Datei komplett in den Speicher zu laden. Du müsstest also schauen, ob Du ggf. eine Lösung findest, bei der Du nicht die Datei komplett in den Speicher laden musst sonder bei der Du die Daten als stream schreiben kannst.

Eine Alternative könnte auch sein, dass Du die Datei in Chunks lädst. Also statt einem Request mit der Datei machst Du mehrere Requests mit Blöcken einer bestimmten Größe.
 

Jw456

Top Contributor
Konrad ja das Thema hatten wir schon kann mich da auch noch gut daran erinnern.

Ich kann hier Konrad nur beipflichten.
 
Zuletzt bearbeitet:

Oneixee5

Top Contributor
Ganz naiv gesagt, dann lasse es doch nicht zu, dass zu große Dateien hochgeladen werden. Den freien Speicher kannst du dir geben lassen, die Dateigröße kannst du dir auch geben lassen. Jetzt kannst du den Speicherbedarf der Datei berechnen oder schätzen - aus Erfahrungswerten: 1Mb Dateigröße verbraucht ca. x Mb Ram. - etwas Puffer und fertig. Den freien Speicher und die Formel übergibst du ans Frontend und dort kannst du auch gleich ausrechnen ob es passt. Man könnte auch die Werte vom HTTP-Header nehmen und im Backend prüfen.
Evtl. kannst du auch Speicher außerhalb der JVM verwenden, ich habe aber keine Ahnung ob das bei Android möglich ist, @see https://docs.oracle.com/javase/8/docs/api/java/nio/MappedByteBuffer.html
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Es geht darum, ob ich den Crash verhindern kann und eine Fehlermeldung anzeigen kann, wenn der Speicher es nicht erlaubt. Es geht nicht darum, Größere Dateien zu verschicken.
Dann prüfe erst die Größe der Datei und lade die Datei nicht, wenn die Datei eine bestimmte Größe überschreitet.

Du kannst über die Runtime Klasse schauen, wie viel Speicher zur Verfügung steht.

Und Du kannst den OutOfMemoryError fangen mittels try / catch - wobei das ein Vorgehen ist, das nicht empfohlen wird.
 

wer112

Top Contributor
Dann prüfe erst die Größe der Datei und lade die Datei nicht, wenn die Datei eine bestimmte Größe überschreitet.

Du kannst über die Runtime Klasse schauen, wie viel Speicher zur Verfügung steht.
Wie mache ich die Prüfung Runtime freeMemory(), ich finde leider keine Gescheiten Code.

Ist die Memory Speicherplatz die Größe was Volly benutzen kann?
Und Du kannst den OutOfMemoryError fangen mittels try / catch - wobei das ein Vorgehen ist, das nicht empfohlen wird.
 

Jw456

Top Contributor
Wie du die Größe einer Datei ermittelst wirst du wohl wissen.

Ich meinte erstelle ein paar Datein unterschildlicher Größe und Teste es . Das du bei ca 26MB schon Probleme bekommst weist du ja schon aus deinem Fehler.
 

Marinek

Bekanntes Mitglied
Also ich bin kein App-Entwickler. Daher kommt eine allgemeine Bemerkung von mir: Immer, wenn ich nicht weiter weiß, versuche ich die Fragestellung zu ergoogeln. Also das Herausfinden der Größe einer Datei, schätze ich auf trivial ein. Daher muss man davon ausgehen, dass viele Millionen Menschen das bereits vor mir gemacht hat.

Hier muss man natürlich gewisse Basics beherrschen, damit man auch richtig googeln kann. Versuch mal mit

Android <VERSION> check file size code example

Dann dürfte es nur so Ergebnisse hageln. Dies muss man ausprobieren und wenn du konrete Fragen hast, kannst du sie ja hier posten.


Komisch finde ich, wie deine Aussage aus anderen Beiträgen - meine ich mich zu erinnern, dass du nur eine Art POC baust und deine Mitarbeiter das dann richtig ausimplementieren. Vielleicht würde ich diese Mitarbeiter mal befragen, wie man das macht. Ich möchte dir nix unterstellen, aber irgendwie scheinschst du viel zu programmieren, aber verstehst die Basics nicht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Android Emulator verwendet Bilder der falschen Größe Android & Cross-Platform Mobile Apps 3
K Dynamische (Image)Buttons, Größe bestimmen Android & Cross-Platform Mobile Apps 4
L Android komisches Bitmap-Größe-Problem Android & Cross-Platform Mobile Apps 8
R Android DragShadowbuilder Größe des Schatten Android & Cross-Platform Mobile Apps 2
B Spiel auflösung bei unterschiedliche Display größe? Android & Cross-Platform Mobile Apps 6
W Auswhl nur Zip Dateien Intent Android & Cross-Platform Mobile Apps 5
Meeresgott Android Best Practices zum Laden von Dateien Android & Cross-Platform Mobile Apps 0
V Kennt jemand ein Programm , um .DEX Dateien zu öffnen, bearbeiten und wieder speichern? Android & Cross-Platform Mobile Apps 2
J Android String in andere Java-Dateien überführen Android & Cross-Platform Mobile Apps 1
B Dateien Speichern Android & Cross-Platform Mobile Apps 6
T Android Wie kann man bei WebView Dateien hochladen? Android & Cross-Platform Mobile Apps 6
domjos1994 Große Dateien aus Soap-Objekt Android & Cross-Platform Mobile Apps 10
F Android Effizientes Laden von Dateien Android & Cross-Platform Mobile Apps 8
Anfänger2011 Speichern von bereits gefüllten Dateien Android & Cross-Platform Mobile Apps 8
B Android Dateien senden von assets Ordner? Android & Cross-Platform Mobile Apps 7
U MediPlayer: Wave Dateien aus "Music"-Ordner abspielen Android & Cross-Platform Mobile Apps 3
M Dateien in apk z.B. Texturdaten Android & Cross-Platform Mobile Apps 1
G Android Einbindung von externen Dateien in Eclipse Projekt Android & Cross-Platform Mobile Apps 8
@ .jar Dateien auf Android Gerät (Motorola RAZR XT910) Android & Cross-Platform Mobile Apps 6
P dateien laden nur aus jar? Android & Cross-Platform Mobile Apps 7
T Kann man JAD bzw. JAR Dateien auch auf meiner HP öffnen? Android & Cross-Platform Mobile Apps 2
G Auf vorhandene Dateien zugreifen Android & Cross-Platform Mobile Apps 6
W ColorPicker löst nun Error aus obwohl Github Android & Cross-Platform Mobile Apps 7
Jackii Android Android Studio Error im Testlauf ohne zu programmieren Android & Cross-Platform Mobile Apps 9
J error: <identifier> expected error: illegal start of type "Wo ist der Fehler?" Android & Cross-Platform Mobile Apps 5
H Android Andoid Studio Error (AVD) Android & Cross-Platform Mobile Apps 1
S "Mulitble root tags Error" - was sagt diese Fehlermeldung aus? Android & Cross-Platform Mobile Apps 3
M Error beim drücken der Zurück-Taste am Handy Android & Cross-Platform Mobile Apps 2
H OutOfMemory-Error? Woran liegt's? Android & Cross-Platform Mobile Apps 5
T HttpConnection error connect(Unknown Source) Android & Cross-Platform Mobile Apps 2
N Error in HTTP operation beim KXML parsen Android & Cross-Platform Mobile Apps 7
E compile error Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben