2016-09-08 6 views
2

Firebase Storageにファイルをアップロードしようとしています。問題は、Muñozを含むnameフィールドを持つStorageMetadataを追加することで毎回失敗するということです。なぜなら、無効な文字が含まれているからだと思うのは、ñというメタデータです。私はこの単語をどのようにして有効な形式に渡すことができるか知りたいですか?あなた無効な文字でメタデータを追加する

ありがとうこれは、コードの一部は次のとおりです。

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

私はまだutf-8なし、外出先に文字列を渡そうとしました。アプリを待っている間に、私は約20分後に私を得るエラーは以下のとおりです。

The operation retry limit has-been exceeded. 

私はそれをñを持っていない文字にしようとすると、それが動作します。ログはこれを再帰的に返します:

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 

答えて

4

これはAndroid SDKのユニコードバグのようです(iOSとJSで動作します)。おそらく、1つのエンコーディングでメタデータの長さを数え、別のエンコーディングでコンテンツを転送しているとします。

私が推測しなければならないのは、構成中のキャラクタ(長さはñ == 1)に基づいて計算されますが、分解されたものとして送信されます(なのでñ== 2の長さ)。私たちはAndroidクライアントにバグを提出しており、すぐにこれを修正します。

+0

これには何か?私には同じ名前の都市名が含まれています。または回避策? –

+0

現在、この '.setCustomMetadata(META_LOCATION、Arrays.toString(user.getLocation()。getBytes(Charset.defaultCharset()))))')のような文字列バイト配列として送信しています。 ] bytesString = location.substring(1、location.length() - 1).split( "、"); byte [] bytes =新しいバイト[bytesString.length]; for(int i = 0; i

+0

最新のAndroidクライアントをお使いですか?私はこれを固定して今すぐ導入すべきだと思います - あなたは確認できますか? –