JSON を使用して、Android クライアントから Web サーバーにデータを送信しようとしています。
問題に直面しています。2日以上のデバッグで、JSONArrayクラスのtoStringメソッドが正常に動作していないようです。
GSON ライブラリを使用できないという制約があります。したがって、JSONArray および JSONObject ライブラリのみを扱っています。
次のように JSONArray を構築します。
ArrayList<SMS> SMSArray = SMSHelper.getSMSDetails(context, rEmail, rPhoneNum);
JSONArray jSMSArray = new JSONArray();
for(int i = 0; i < SMSArray.size(); i++) {
jSMSArray.put(i, SMSArray.get(i).toJSON());
Log.wtf("::trace", "JSONArray.get(i).toString(): " + jSMSArray.get(i).toString());
}
Log.wtf("::trace", "JSONArray.toString(): " + jSMSArray.toString());
ループ内で、JSONArray と ArrayList からまったく同じ文字列が出力されます。SO ArrayList の JSONArray へのコピーは正常に機能しているようです。さらに、ループの後、2 つの配列のサイズは同じです。
それにもかかわらず、ループの後に JSONArray.toString() を使用すると、驚くべきことに、文字列は完全ではなく、文字列は、JSONArray を含む 285 個の JSONObject のうち少数の JSONObject しか出力しません!
この JSONARRAY をサーバーに送信してサーバー側で解析したいのですが、JSONArray が正しくないためです。サーバーは、受信した文字列チェーンを解析できません。受け取った文字列チェーンは次のようになります: [{object1}, ..., {objecti}, {"id", $myId, "thread", $myThread, "content", "hey
あなたの一人が私を助けてくれることを本当に願っています。それは私を夢中にさせています。最初に構文を使用しましたfor(Object object: ObjectArray)
が、JSONArray は反復可能なオブジェクトではないことを知ったので、JSONObject を特定のインデックス内に直接配置しようとしましたが、同じ結果が得られました。
このコードは私の修士論文の一部であり、この詳細についてかなりの時間を失っています... :/
私は本当にあなたの答えを楽しみにしています。
おやすみ、
ビョルン
編集: 私の JSONObject は、Android 携帯電話に保存されている SMS です。それらを JSONObject に変換する私の機能は次のとおりです。
public JSONObject toJSON() {
JSONObject jSMS = new JSONObject();
try {
jSMS.put("id", this.id);
jSMS.put("thread", this.thread);
jSMS.put("rEmail", this.rEmail);
jSMS.put("rPhoneNum", this.rPhoneNum);
jSMS.put("sPhoneNum", this.sPhoneNum);
jSMS.put("sName", this.sName);
jSMS.put("date", this.date);
jSMS.put("content", this.content);
jSMS.put("type", this.type);
} catch (JSONException e) {
Log.wtf("::trace", Log.getStackTraceString(e));
}
return jSMS;
}
EDIT1: JSONArray をループしてJSONArray.getJSONObject(i).toString()
すべて正常に動作すると、配列の内容全体が出力されます。JSONArray.toString() メソッドを呼び出すと、JSONArray の先頭のみが出力されます。私はそれで本当に疲れ始めます。何がそのようなエラーを引き起こすのかわかりません。