Как читать массив JSON? - PullRequest
       6

Как читать массив JSON?

0 голосов
/ 26 августа 2018

Я хочу прочитать массив JSON с Retrofit 2, это мой пример JSON:

{
    "id":"58",
    "p":"4297f44b13955235245b2497399d7a",
    "name":"0634063306cc06340634063306cc",
    "contacts" : [
        {
            "id":"1",
            "name":"test1"
        },
        {
            "id":"2",
            "name":"test2"
        },
        {
            "id":"3",
            "name":"test3"
        },
        {
            "id":"4",
            "name":"test4"
        },
        {
            "id":"5",
            "name":"test5"
        }
   ]
}

У него есть несколько объектов и массив с именем contacts.

Это мой код для чтения объектов:

public interface UserLogin {
    @GET("/getLogin3.php")
    Call<UserItems>getUser(@Query("e") String user, @Query("p")String pass);

}
public interface UserLogin {
    @GET("/getLogin3.php")
    Call<UserItems>getUser(@Query("e") String user, @Query("p")String pass);

    @GET("/getLogin3.php")
    Call<List<SimpleItem>>getItems();
}

это мои контакты и класс контактов, как вы можете видеть ниже

    public class Contact {

    @SerializedName("id")
    @Expose
    private String id;
    @SerializedName("name")
    @Expose
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Contact withId(String id) {
        this.id = id;
        return this;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Contact withName(String name) {
        this.name = name;
        return this;
    }

}

    public class Contacts {

    @SerializedName("contacts")
    @Expose
    private List<Contact> contacts = null;

    public List<Contact> getContacts() {
        return contacts;
    }

    public void setContacts(List<Contact> contacts) {
        this.contacts = contacts;
    }

    public Contacts withContacts(List<Contact> contacts) {
        this.contacts = contacts;
        return this;
    }

}

активность:

    Call<List<Contacts>>rows=connection.getItems();
        rows.enqueue(new Callback<List<Contacts>>() {
            @Override
            public void onResponse(Call<List<Contacts>> call, Response<List<Contacts>> response) {
                List<Contact>contacts=response.body().getContacts();

            }

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

            }
        });

У меня есть такой вызов в моей деятельности, но он не находит метод getContacts().

Ответы [ 3 ]

0 голосов
/ 26 августа 2018

Сделай так:

Контакт

public class Contact {

    @SerializedName("id")
    @Expose
    private String id;
    @SerializedName("name")
    @Expose
    private String name;

    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;
    }


}

SimpleItem

public class SimpleItem {

@SerializedName("id")
@Expose
private String id;
@SerializedName("p")
@Expose
private String p;
@SerializedName("name")
@Expose
private String name;
@SerializedName("contacts")
@Expose
private List<Contact> contacts = null;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getP() {
return p;
}

public void setP(String p) {
this.p = p;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public List<Contact> getContacts() {
return contacts;
}

public void setContacts(List<Contact> contacts) {
this.contacts = contacts;
}

}

интерфейс

@GET("/getLogin3.php")
Call<SimpleItem>getItems();

Модифицированный звонок

     Call<SimpleItem>rows=connection.getItems();
    rows.enqueue(new Callback<SimpleItem>() {
        @Override
        public void onResponse(Call<SimpleItem> call, Response<SimpleItem> response) {
            SimpleItem simpleItem = response.body();
            List<Contact>contacts=simpleItem.getContacts();

        }

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

        }
    });
0 голосов
/ 27 августа 2018

https://github.com/robohorse/RoboPOJOGenerator

Intellij Idea, плагин для Android Studio для преобразования JSON в POJO.

Создание файлов Java и Kotlin POJO из JSON: GSON, AutoValue, Logan Square, FastJSON, Jackson, Moshi, пустой шаблон аннотаций. Поддерживает: примитивные типы, несколько внутренних JSONArrays.

Это быстрый способ создания pojo

0 голосов
/ 26 августа 2018

Ваш UserItems класс должен быть таким:

package com.example;


public class Contact {

private String id;
private String name;

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;
}

}
-----------------------------------com.example.UserItems.java-----------------------------------

package com.example;

import java.util.List;

public class UserItems {

private String id;
private String p;
private String name;
private List<Contact> contacts = null;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getP() {
return p;
}

public void setP(String p) {
this.p = p;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public List<Contact> getContacts() {
return contacts;
}

public void setContacts(List<Contact> contacts) {
this.contacts = contacts;
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...