2012年1月21日土曜日

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

というわけで、全ての原因がわかったー!のである?かも。
着地、JSONが壊れている?のが原因だった。
ていうか、
try{var json = JSON.parse(str);}catch(e){alert("dame-");}
て、やってなかったから、ハングアップしてたんだけども。

取りあえず、前回書いたUTF-8コードに置き換えて、
更にescape(responseText)して、WebViewにぶん投げて、
WebViewのjQueryで$("body").html(escapedJSON);ってして、結果を見てみた。
Stringが壊れてるってなって、どんなデータなのか把握も出来ない感じになるので、
そこが困った。

対処法としては、 items[i].access が今回変になるのを確認したので、
plusapi.js の
1023~1027行辺り の access{} をコメントアウトして、
1152行辺りに、activity.access.items.push();しているIFが3つあると思うんで、
そのIFを3つ全部コメントアウトしたら、取りあえず大丈夫になった。
でも、今一旦動くだけで、
なんか例外的に変なものが投げられたりすると、JSONパースエラー起こすかもなーとは思う。
細々書き直していたので、行数は目安で。

でも、この、activity.access.items.push() のところ、別に変になる理由ないんだけどなー。なんなんだろ?
わけが判らないなー。
オブジェクトの{ } がちゃんと閉じられてなかったんだよねぇ。謎。

前回だったか、Content-Length : body.length ってサーバ側でやってて、
クライアント側でresponseText.length ってやったときの、数字が違うことがあったりした。

xhr.onload = function(){
 var contentLength =  this.getResponseHeader("Content-Length")
 var bodyLength    = this.responseText.length;
 Ti.API.info("contentLength - " + contentLength);
 Ti.API.info("bodyLength - " + bodyLength);

}

Titanium側でこんなのやったんだけども。
うむー。わけがわからないなー。まぁ、とりあえず、一旦動くようになったので、報告でした。

全体的なまとめとしては、
 サーバ側
  server.js
   ・ res.header('Content-Length', body.length); をつける。
   ・ if (req.query.callback) {} をコメントアウトする(俺だけ)
  plusapi.js
   ・ 前の記事の utf8ize() で全部の文字をUTF-8コードにしておいた(必要ないかも)
   ・ activity.access オブジェクトを全部削除してみた。
 クライアント側
  ちゃんとJSONは try{} のなかでパースしましょう。基本です。

こんな感じでした。

0 件のコメント:

コメントを投稿