1

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 の先頭のみが出力されます。私はそれで本当に疲れ始めます。何がそのようなエラーを引き起こすのかわかりません。

4

1 に答える 1

1

Logcat のサイズ制限とその容量を変更する方法を参照してください。

すべての logcat エントリは、特定の文字数に制限されています (Android デバイスによって異なります)。285 オブジェクトの長さの JSON 配列が 1 つの logcat エントリには長すぎる可能性が非常に高いため、途中で切り捨てられます。あなたのjsonオブジェクトに問題があるとは思いません(または、ある場合は、あなたが見つけたものではありません)

于 2015-08-29T15:04:45.743 に答える