【问题标题】:JsonObject Build Stackoverflow errorJsonObject 构建 Stackoverflow 错误
【发布时间】:2014-03-02 19:19:53
【问题描述】:

我正在尝试构建一个 jsonobject 以通过发布请求发送。但相反,我得到如下所示的错误:

03-02 13:54:50.340: E/AndroidRuntime(2862): FATAL EXCEPTION: main
03-02 13:54:50.340: E/AndroidRuntime(2862): Process: in.mally.mallys, PID: 2862
03-02 13:54:50.340: E/AndroidRuntime(2862): java.lang.StackOverflowError
03-02 13:54:50.340: E/AndroidRuntime(2862):     at java.lang.String._getChars(String.java:908)
03-02 13:54:50.340: E/AndroidRuntime(2862):     at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:147)
03-02 13:54:50.340: E/AndroidRuntime(2862):     at java.lang.StringBuilder.append(StringBuilder.java:216)
03-02 13:54:50.340: E/AndroidRuntime(2862):     at org.json.JSONStringer.beforeValue(JSONStringer.java:412)
03-02 13:54:50.340: E/AndroidRuntime(2862):     at org.json.JSONStringer.open(JSONStringer.java:178)
03-02 13:54:50.340: E/AndroidRuntime(2862):     at org.json.JSONStringer.object(JSONStringer.java:158)
03-02 13:54:50.340: E/AndroidRuntime(2862):     at org.json.JSONObject.writeTo(JSONObject.java:670)

错误似乎是 stackoverflow 错误。我不太明白它是如何工作的。下面的代码尝试构建一个 jsonObject 并将该 Object 作为一个值放入另一个 Jsonobject 中。 我尝试制作的 JsonObject 格式是

{ "email" : "a@b.com",
  "user_record" : first_jsonObject
}

First JsonObject 只是一个简单的键值对字符串。下面是我用来实现它的代码。

JSONObject j = new JSONObject();
    try {
        j.put("offer_id", "531328f8616c69133a350000");
        j.put("views", "1");
        j.put("call_count", "0");
        j.put("rating", "3");
    } catch (JSONException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    JSONObject json = new JSONObject();
    try {
        json.put("email", "a@b.com");
        json.put("user_post_records", json);

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    JsonObjectRequest r = new JsonObjectRequest(Method.POST,POST_URL, json, 
            new Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    // TODO Auto-generated method stub

                }
            }, 
            new ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    // TODO Auto-generated method stub

                }
            });
    VolleyRequest.getInstance(getActivity().getBaseContext()).getRequestQueue().add(r);

【问题讨论】:

    标签: java android json android-volley


    【解决方案1】:

    您正在尝试将json 对象设置为自身的值。因此,它调用自己,这成为无效的递归调用,因此 StackOverflowError

    这可能是你的错字,因此:

    变化:

    json.put("user_post_records", json);
    

    收件人:

    json.put("user_post_records", j);
    

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      相关资源
      最近更新 更多