Хотите установить имя ArrayList в string или TextView в retrofitV2

#android #json #arraylist #retrofit2

#Android #json #arraylist #retrofit2

Вопрос:

У меня есть ответ в формате json

 {
    "status": "success",
    "suggestion": {
        "message": {
            "message_a":"a",
            "message_b":"b"
        },
        "message1": {
            "message_a":"a",
            "message_b":"b"
        },
        "message2": {
            "message_a":"a",
            "message_b":"b"
        }
    }
}
  

Я хочу установить «message» и «message2» из ответа в String или TextView в retrofitV2

Класс ApiInterface

 public interface ApiInterface {
@GET(“url”)
Call<Contributor>getCheck();
}
  

Участник

 public class Contributor {
    @SerializedName("status")
    String status;
    @SerializedName("suggestion")
    ArrayList<Suggestion_List>suggestion;

    public String getName() {
            return name;
    }

    public ArrayList<Suggestion_List> getSuggestion() {
        return suggestion;
    }

}
  

Это код, который я еще далеко сделал

Комментарии:

1. предоставьте свой код

2. Я пробовал много раз, но я не понимаю логику, что мне следует использовать — Юрий Попив

3. По крайней мере, мне нужны URL и параметры, чтобы предоставить вам пример кода

4. Можете ли вы помочь мне с кодом, как мне создать ArrayList и как установить имя ключа ArrayList в TextView с помощью retrofit, И ПОЛУЧИТЬ ответ в вопросе — тот же ответ, только значение отличается — Юрий Попив

5. конечно, но предоставьте код с вашим запросом API, кодом действия и т.д..

Ответ №1:

Итак, если вы не можете изменить ответ на "message": {},"message": {},"message": {} , то единственным способом является синтаксический анализ как JSONObject.

Сначала создайте:

     public class Message {

        @SerializedName("message_a")
        private String message_a;
        @SerializedName("message_b")
        private String message_b;

    public Message(String message_a, String message_b) {
        this.message_a = message_a;
        this.message_b = message_b;
    }

        public String getMessage_a() {
            return message_a;
        }

        public void setMessage_a(String message_a) {
            this.message_a = message_a;
        }

        public String getMessage_b() {
            return message_b;
        }

        public void setMessage_b(String message_b) {
            this.message_b = message_b;
        }
    }
  

}

 public interface ApiInterface {
    @GET("url")
    Call<JSONObject> getCheck();
}
  

И, наконец, в вашей деятельности

 private ApiInterface apiInterface;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    apiInterface = ApiClient.getApiClient().create(ApiInterface.class);

    Call<JSONObject> call = apiInterface.getCheck();
    call.enqueue(new Callback<JSONObject>() {
        @Override
        public void onResponse(Call<JSONObject> call, Response<JSONObject> response) {
            try {
                JSONObject suggestion = response.body().getJSONObject("suggestion");
                Message message = new Message(suggestion.getJSONObject("message").getString("message_a"), 
                        suggestion.getJSONObject("message").getString("message_b"));
                Message message1 = new Message(suggestion.getJSONObject("message1").getString("message_a"), 
                        suggestion.getJSONObject("message1").getString("message_b"));
                Message message2 = new Message(suggestion.getJSONObject("message2").getString("message_a"), 
                        suggestion.getJSONObject("message2").getString("message_b"));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(Call<JSONObject> call, Throwable t) {

        }
    });


}
  

Затем установите текст для TextView

 textView.setText(message.getMessage_a());
textView.setText(message.getMessage_b());
  

Комментарии:

1. Можно ли обойтись без изменения ответа Api и сделать это в Object

2. Значит, вместо создания ArrayList я должен создать класс JSONObject?.

3. Я хотел установить имя JSONObject в textview вместо значений внутри JSONObject, и могу ли я запустить его в цикле for. @YuriPopiv @Юрипопив

4. @AviSoni Я обновил ответ. Но вы не можете запустить подобный ответ в цикле, потому что "suggestion" это object не array

5. Есть ли какой-либо другой вариант для запуска в цикле, потому что ответ всегда будет отличаться по предложению, и размер также будет отличаться @YuriPopiv