#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