2016-09-08 1 views
2

Ich versuche, eine Datei in Firebase Storage hochzuladen. Das Problem ist, dass durch Hinzufügen eines mit einem name Feld, das Muñoz enthält, jedes Mal fehlschlägt. Der Grund, den ich denke, ist, weil es ein ungültiges Zeichen enthält, die Metadaten, die die ñ sind. Ich würde gerne wissen, wie ich dieses Wort zu einem gültigen Format weitergeben kann? DankeHinzufügen von Metadaten mit ungültigen Zeichen

Dies ist das Stück Code:

StorageMetadata metadata = new StorageMetadata.Builder() 
.setCustomMetadata("avatar",mFirebaseUser.getPhotoUrl().toString()) 
.setCustomMetadata("nombre","Muñoz") .setContentType("image/jpg") 
.build(); 

Ich habe versucht, die Zeichenfolge zu utf-8 und noch nicht gehen zu passieren. Der Fehler, den ich mir nach etwa 20 Minuten erhalten, während für die App wartet:

The operation retry limit has-been exceeded. 

Wenn ich mit einem Charakter versuchen, dass es nicht ñ hat, es funktioniert. Die Log gibt mir diese rekursiv:

09-08 21:33:08.405 3019-3444/cf.castellon.turistorre W/NetworkRequest: error sending network request POST https://firebasestorage.googleapis.com/v0/b/project-1031372115432573568.appspot.com/o 
                     java.net.ProtocolException: exceeded content-length limit of 186 bytes 
                      at com.android.okhttp.internal.http.RetryableSink.write(RetryableSink.java:58) 
                      at com.android.okhttp.okio.RealBufferedSink.close(RealBufferedSink.java:234) 
                      at com.android.okhttp.okio.RealBufferedSink$1.close(RealBufferedSink.java:209) 
                      at java.io.OutputStreamWriter.close(OutputStreamWriter.java:144) 
                      at bzr.a(:com.google.android.gms.DynamiteModulesC:364) 
                      at bzr.b(:com.google.android.gms.DynamiteModulesC:246) 
                      at bzr.a(:com.google.android.gms.DynamiteModulesC:270) 
                      at bzl.onTransact(:com.google.android.gms.DynamiteModulesC:53) 
                      at android.os.Binder.transact(Binder.java:387) 
                      at com.google.android.gms.internal.zzamj$zza$zza.zzss(Unknown Source) 
                      at com.google.android.gms.internal.zzamm.zza(Unknown Source) 
                      at com.google.android.gms.internal.zzamd.zza(Unknown Source) 
                      at com.google.android.gms.internal.zzamd.zzd(Unknown Source) 
                      at com.google.firebase.storage.UploadTask.zzb(Unknown Source) 
                      at com.google.firebase.storage.UploadTask.zzcyn(Unknown Source) 
                      at com.google.firebase.storage.UploadTask.run(Unknown Source) 
                      at com.google.firebase.storage.StorageTask$5.run(Unknown Source) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                      at java.lang.Thread.run(Thread.java:818) 
                     --------- beginning of system 
09-08 21:33:09.605 3019-3444/cf.castellon.turistorre W/ExponenentialBackoff: network unavailable, sleeping 

Antwort

4

Dieses wie ein Unicode-Fehler in unserem Android SDK sieht (es funktioniert in iOS und JS). Vermutlich zählen wir die Länge der Metadaten in einer Kodierung, während wir den Inhalt in einer anderen Kodierung übertragen.

Wenn ich raten musste, berechnen wir das Limit basierend auf dem zusammengesetzten Zeichen (Länge ñ == 1), aber senden es als zerlegt (Länge von ñ == 2, da es ist). Wir haben einen Fehler auf dem Android-Client gemeldet und werden dies bald beheben.

+0

irgendwas dabei? Ich habe dasselbe Problem mit einem Stadtnamen, der ă enthält. Oder Workaround? –

+0

derzeit sende ich es als String-Byte-Array wie diese '.setCustomMetadata (META_LOCATION, Arrays.toString (user.getLocation(). GetBytes (Charset.defaultCharset())))) und erhalten es zurück wie diese' String [ ] bytesString = location_string (1, location.length() - 1) .split (","); byte [] bytes = neues Byte [bytesString.length]; für (int i = 0; i

+0

Verwenden Sie unseren neuesten Android-Client? Ich nehme an, das sollte jetzt behoben und implementiert werden - können Sie das überprüfen? –

Verwandte Themen