Я работаю с API-интерфейсом для входа в систему и отправляет сложный ответ при успешном входе в систему. У меня проблемы с реализацией полученного массива в классе POJO, созданном для ответа. Массив содержит два вложенных объекта.
Я пытался использовать arraylist, чтобы получить его, но я получаю сообщение об ошибке
public class User{
String id;
String name;
String email;
String email_verified_at;
@SerializedName("user_agents")
private ArrayList<UserAgents> userAgents ;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail_verified_at() {
return email_verified_at;
}
public void setEmail_verified_at(String email_verified_at) {
this.email_verified_at = email_verified_at;
}
UserAgents.java
public class UserAgents{
public UserAgents(){
device = "";
token_id = "";
}
@SerializedName("device")
String device;
@SerializedName("token_id")
String token_id;
public String getDevice() {
return device;
}
public void setDevice(String device) {
this.device = device;
}
public String getToken_id() {
return token_id;
}
public void setToken_id(String token_id) {
this.token_id = token_id;
}
}
Ожидаемый формат JSON:
"user_agents": "
[
{"device":"Mozilla/5.0 (Macintosh; Intel Mac OS X x.y;
rv:42.0) Gecko/20100101 Firefox/42.0",
"token_id":"ec4eccb011beb3c41f11e83f670ae635117770ac7bc9fb2ac3fbdac3645c16e63e64038d2ad0aa3c"
},
{"device":"Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0",
"token_id":"8e2bfef45fda2387ede9aa06d71247873db6390f3bf1e5c704cf51e76e3ecbd25cacdfb276464404"
}
]"
Это ошибка, которую я получаю:
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 145 path $.success.user.user_agents
ваша обработка ответов неверна, в соответствии с ошибкой ответ веб-службы является типом строки, но вы устанавливаете класс модели, который является типом массива,
или поделитесь ответом веб-службы для лучшего решения.
удаление ключевого слова «user_agents» из ответа.
ваш ответ веб-службы должен быть таким,
[ {"device":"Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0",
"token_id":"ec4eccb011beb3c41f11e83f670ae635117770ac7bc9fb2ac3fbdac3645c16e63e64038d2ad0aa3c" }, {"device":"Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0", "token_id":"8e2bfef45fda2387ede9aa06d71247873db6390f3bf1e5c704cf51e76e3ecbd25cacdfb276464404" } ]
Из-за того, что user_agents
содержит ""
Итак, вот ваша user_agents
строка
Вам нужно удалить ""
из "user_agents": [ ]
{
"user_agents": [
{
"device": "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0",
"token_id": "ec4eccb011beb3c41f11e83f670ae635117770ac7bc9fb2ac3fbdac3645c16e63e64038d2ad0aa3c"
},
{
"device": "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0",
"token_id": "8e2bfef45fda2387ede9aa06d71247873db6390f3bf1e5c704cf51e76e3ecbd25cacdfb276464404"
}
]
}
Пожалуйста, проверьте свой JSON здесь jsoneditoronline.org здесь вы получаете сообщение об ошибке
* ЭТО БУДЕТ РАБОТАТЬ *
JSONObject JO = new JSONObject(jsonresponse);
JSONArray JA = (JSONArray) JO.getString("user_agents");
for (int i = 0; i < JA.length(); i++)
{
JSONObject jo = (JSONObject)JA.get(i);
UserAgents UA = new UserAgents();
UA.device = jo.getString("device");
UA.token_id =jo.getString("token_id");
userAgents.add(UA);
}
Я не понимаю. Предполагается, что «user_agents» является именем массива json в соответствии с обычным соглашением об именах JSON. удаление "" должно дать ошибку. Пожалуйста, помогите с дополнительным объяснением. Спасибо