Как скопировать и изменить объекты класса POJO, созданные ответом JSON из Retrofit2.0 - PullRequest
0 голосов
/ 29 мая 2018

Например, я получаю следующий ответ JSON:

{
  "metadata": {
    "provider": "ABC"
  },
  "results": [
    {
      "id": "ace",
      "language": "en",
      "lexicalEntries": [
        {
          "lexicalCategory": "Noun"
        },
        { 
          "lexicalCategory": "Adjective"
        },
        {
          "lexicalCategory": "Verb"
        }
      ],
      "type": "headword",
      "word": "ace"
    }
  ]
}

Я использую Retrofit2.0 и gson для его анализа и сопоставления с классами POJO следующим образом:

class QueryResponse {
    public Metadata metadata;
    public List<Result> results = null;
}
class Result {
    public String id;
    public String language;
    public List<LexicalEntry> lexicalEntries = null;
    public String type;
    public String word;
}

class LexicalEntry {
    public String lexicalCategory;
}

onResponse () выглядит следующим образом:

@Override
public void onResponse(Call<QueryResponse> call, Response<QueryResponse> response) {
     if (response.code() == 200) {
         Result result = response.body().results.get(0);
         lexicalEntries = result.lexicalEntries;
     }
}

Теперь у меня есть другой метод, в котором я хочу создать свой собственный объект LexicalEntry (а именно, updatedLexicalEntry) и скопировать значение изчто было извлечено из JSON, а затем измените его по-своему для дальнейшего использования.

private void createSubWords(List<LexicalEntry> lexicalEntries) {
    LexicalEntry revisedLexicalEntry;
    for (int x = 0; x < lexicalEntries.size(); x++) {
        revisedLexicalEntry = lexicalEntries.get(x);
        revisedLexicalEntry.lexicalCategory = "Something...";
    }
}

Что происходит, когда позже я пытаюсь получить lexicalCategory исходного JSON (lexicalEntries.get (x) .lexicalCategory), он также изменяется на «Что-то ...» вместо того, что было его первоначальным значением.

Как мне достичь своей цели - сохранить ценность оригиналов, но скопировать и изменить ее для дальнейшего использования?Я просто надеюсь, что достаточно ясно изложил свой вопрос.

Заранее спасибо!

PS, фактический JSON, с которым я работаю, гораздо сложнее, но я упростил его здесь для лучшего понимания.и более быстрые предложения.

1 Ответ

0 голосов
/ 29 мая 2018

Как мне достичь своей цели - сохранить ценность оригиналов, но скопировать и изменить ее для дальнейшего использования?

Создать новый объект LexicalEntry с вашим новым значением, а неизменение существующего объекта, как вы делаете сейчас.

...