私は、PC上の.NET HTTPサービスに接続し、そのPC上のメディアディレクトリを閲覧できるAndroidアプリを持っています。インタフェースは、現在のディレクトリ/メディアファイルのリストを持つファイルエクスプローラに似ています。バイト配列を文字列に変換するときに切り捨てられたJSON
ユーザーがリストからディレクトリ名を選択すると、そのディレクトリの内容がJSON応答で返されます。
私の問題は、JSONが不完全であると思うことがありますが、サーバー側にJSON文字列を記録して正しく終了する理由がわかりません。次のように応答があるハンドルAndroidのコード...
int contentLength = -1;
int totalRead = 0;
int numRead = -1;
InputStream inStream = connHelper.getInputStream();
contentLength = connHelper.getContentLength();
byte[] buffer = new byte[contentLength != -1 ? contentLength : 8192];
while ((numRead = inStream.read(buffer)) != -1)
if (numRead != 0)
totalRead += numRead;
Log.d(TAG, "getMediaList() - totalRead: " + totalRead);
String jsonString = new String(buffer, "UTF-8");
Log.d(TAG, "jsonString.length() - " + jsonString.length());
Log.d(TAG, "jsonString - " + jsonString);
はここで...イベントの良い一連のアンドロイドlogcatのログです
requestValue: D:\Jukebox\Classical\Classic FM - Smooth Classics (Do Not Disturb) (Disc 2)\
getMediaList() - totalRead: 501
jsonString.length() - 501
jsonString - {"folders":[],"media":[<cut for brevity>]}
...しかし、ここにログですメディアのこのリストの一貫性のある悪いもの...
requestValue: D:\Jukebox\Classical\De Lucia, Paco\Collection\
getMediaList() - totalRead: 353
jsonString.length() - 351
jsonString - {"folders":[],"media":[<cut for brevity>,"14 Concierto de Aranjuez (Adagio).mp3"
お知らせの問題メディアのリストについては、読んで総バイト数は353ですが、jsonString
はわずか351バイトです。また、jsonString
のログには、閉じる配列/オブジェクト文字]}
がないことが表示されます。
私はこれで完全に混乱しています。 .NETサーバーのログには完全なJSON文字列が表示され、Androidログの表示では353バイトが読み取られますが、jsonString
の長さは351バイトしか表示されません。誰がこれを引き起こすかもしれないか説明することはできますか?
私はそれも疑っていますが、欠落している文字は明らかに ']}'です。また、実際にUTF-8であれば、彼が使用しているコンストラクタはうまくいきます。 –
@Argyle:私はあなたが何かにいるかもしれないと思います。はい、両端にUTF-8処理がありますが、コンテンツ長を設定するときにサーバー上で何か問題があると思います。マルチバイト文字には、分音記号を持つ1つの「曲」があり、2つの余分なバイトを考慮する可能性があるため、説明します。私はすぐに書き直す必要があります。 – Squonk
@Argyle:正しい方向で私を指摘していただきありがとうございます - 私はサーバーエンドコードを見直す機会がありました。正しいマルチバイトではなくメディアファイル名の文字数としてContent-Lengthを報告していましたカウント - すべての分音文字のサポートですべてが機能しています。私は明日の 'InputStreamReader'を見ていきます(現在は2時近くです)。スペインのギター音楽を鑑賞することで頭が痛いと思ったのは誰でしょう? :D – Squonk