2012年1月21日土曜日

続々々・Titanium 1.8 のHTTPClient で Could not find class 'org.apache.http.entity.mime.content.StringBody' というエラー

余裕でさっき書いた文章は嘘っぱちのクソ文章でした。ごめんなさい。
plusapi.js は直さなくてもいいです。多分。
server.js のContent-Length がちゃんと指定されてないから問題なのだみたいでした。
YungSang はちっとも悪くないのである。俺はやっぱりだめな男だ。ごめんねYungSang。

var body = JSON.strigify(json) したもののバイト数と、
body.length が同じだと、エラーは発生しないけど、その誤差があると、
JSONファイルが正しく外に出ないで、エラーが出るみたい。

というわけで、server.jsの下のほうを

// 改行とスペースを改行だけにする
        while(body.match(/\n\s/gi)){
            body = body.replace(/\n\s/gi,"\n");
        }
// 改行を取り除く
        body = body.replace(/\n/gi,"");
// バイト数を得る(後述)
        var bodyByte  = (function(body){
            var c = 0;
            for(var i = 0,l = body.length; i < l; i ++){
                c += (escape(body.charAt(i)).length < 4) ? 1 : 2;
            }
            return c;
        })(body);
// バイト数とbody.length の差を バイト数に追加。
        bodyByte += (bodyByte - body.length);
// ヘッダをセットして送信
        res.header('Content-Type', 'application/json');
        res.header('Content-Length', bodyByte);
        res.send(body);


改行を取り除く辺りが必要なのか否かは、ちょっと不明。
取りあえず、そうやったら動いているので、そうしています。
正規表現を理解していないのが露呈している感じです。

で、バイト数を得るってところは、

文字列のバイト数を求める

ここを参考にしました。無駄に無名関数。
というわけで、UTF-8コードにしなくても、activity.access をいじらなくても、データが取れました。
よかったよかった。ありがとうYungSang。グレイトフル・リスさん。

0 件のコメント:

コメントを投稿