【问题标题】:JSONObject is not updated correctlyJSONObject 未正确更新
【发布时间】:2019-09-17 15:35:55
【问题描述】:

我正在更新 JSONArray 内的 JSONObject 中的值,当更改所有 JSONArray 中的值时。有人知道为什么吗?

 public static void uploadMediaWithThumbnail( final LeagueActivity.UploadingCallback call,
                                             final long leagueId,
                                             final JSONArray information, final JsonHttpResponseHandler handler) {


    final AtomicInteger receivedCount = new AtomicInteger();
    receivedCount.set(0);

    call.progressCall(10);

    getMediaUploadUrl(leagueId, information,  new JsonHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            try {
                call.progressCall(20);

                final JSONArray allData = response.getJSONArray("upload_data");
                AsyncHttpClient[] clients = new AsyncHttpClient[allData.length()*2];
                JSONArray jarr = information;

                for (int i = 0; i < allData.length(); i++ ) {
                    final String uploadUrl = allData.getJSONObject(i).getString("content_url");
                    final String previewUrl = allData.getJSONObject(i).getString("preview_url");

                    jarr.getJSONObject(i).put("content", uploadUrl);
                    jarr.getJSONObject(i).put("preview", previewUrl);

                }

                final JSONArray newInfo = shallowCopy(jarr);

                Log.d("Log1", newInfo.getJSONObject(1).getString("content"));

                Log.d("Log2", newInfo.getJSONObject(0).getString("content"));

记录 Log1 和 Log2 时,它们包含相同的链接

信息是这样的数据[{"type":"video","format":"mp4","preview_format":"jpg"}, {"type":"video","format":"mp4","preview_format":"jpg"}]

AllData 是从 REST HTTP 调用接收的信息,与信息具有相同的长度

【问题讨论】:

  • 信息是一个带有数据的 JSONArray
  • 请发布完整代码@David Vittori
  • 似乎information 与当前形式的allData 是多余的。如果information 是在本地维护的,则没有理由在 JSON 中处理它。它可以是普通的数据结构,如 List 或 Array。
  • 好吧,所有数据都从服务器中检索出来,信息将被发送出去。
  • 您确定alldatainformation 具有相同的长度,因为您在一个循环中解析两者。

标签: java android arrays json


【解决方案1】:

感谢您的更新。

您希望将信息项添加到 JSONObject 中,然后将该对象添加到您的 JSONArray。

    JSONArray jarr = information;

    for (int i = 0; i < allData.length(); i++ ) {
        final String uploadUrl = allData.getJSONObject(i).getString("content_url");
        final String previewUrl = allData.getJSONObject(i).getString("preview_url");

        JSONObject object = new JSONObject();
        object.put("content", uploadUrl);
        object.put("preview", previewUrl);
        jarr.put(i, object);
    }

在 for 循环之后,您可以从键中获取值。

或者,如果 jarr 已经有对象...

    JSONArray jarr = information;

    for (int i = 0; i < allData.length(); i++ ) {
        final String uploadUrl = allData.getJSONObject(i).getString("content_url");
        final String previewUrl = allData.getJSONObject(i).getString("preview_url");

        JSONObject object = new jarr.getJSONObject(i);
        object.put("content", uploadUrl);
        object.put("preview", previewUrl);
        jarr.put(i, object);
    }

这未经测试,但应该可以工作。哈哈

【讨论】:

  • 谢谢!我做了这样的事情,但我也创建了一个新的 JSONArray 并在那里添加了所有内容
  • @DavidVittori 没问题,如果这有助于回答您的问题,请接受。 :)
【解决方案2】:

这样试试,

JSONArray jsonArray;
    try {
//here replace with your data object
        jsonArray = new JSONArray(" [{\"type\":\"video\",\"format\":\"mp4\",\"preview_format\":\"jpg\"}, {\"type\":\"video\",\"format\":\"mp4\",\"preview_format\":\"jpg\"}]");
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            jsonObject.put("content", "test value " + i);
        }
        Log.d("Print test",  jsonArray.getJSONObject(0).toString());
        Log.d("Print test",  jsonArray.getJSONObject(1).toString());
    } catch (
            JSONException e) {
        e.printStackTrace();
    }

【讨论】:

  • 谢谢,我必须创建一个新的 JSONArray 并插入新的 JSONObject,其中包含信息
猜你喜欢
  • 2016-01-14
  • 2021-10-26
  • 2021-11-03
  • 2018-01-20
  • 2020-04-09
  • 2013-04-02
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多