Android-анализ многоуровневого вложенного JSON с GSON в AsyncTask - PullRequest
0 голосов
/ 17 октября 2018

Я получил значения JSON, которые состояли из многоуровневых и вложенных.Но я не знаю, как поместить его в массив и передать в onPostExcute.

Я присоединю свой класс JSON, POJO и код активности.Если вы не понимаете или имеете дополнительную информацию, которая вам нужна, оставьте комментарий.

{
"Query":"query",
"KMAQuery":"query",
"TotalCount":3,
"Data":[{"CollName":"collName",
         "TotalCount":3,
         "Count":3,
         "Result":[{"title":"title1",
                    "nation":"nation1",
                    "company":"company1",
                    "plot":"blahblah",
                    "runtime":"",
                    "rating":"",
                    "genre":"genre1",
                    "posters":"http://file.koreafilm.or.kr/thm/02/00/02/24/tn_DPK006858.JPG",
                    "kmdbUrl":"http://www.kmdb.or.kr/vod/vod_basic.asp?nation=K&p_dataid=01040",
                    "stlls":"",
                    "salesAcc":"",
                    "audiAcc":"",
                    "director":[{"directorNm":"direct1",
                                 "directorId":"00004544"}],
                    "actor":[{"actorNm":"name1","actorId":"00000891"},
                             {"actorNm":"name2","actorId":"00005101"},
                             {"actorNm":"name3","actorId":"00004261"}],
                    "rating":[{"ratingMain":"Y",
                               "ratingDate":"19640717",
                               "ratingNo":"",
                               "ratingGrade":"",
                               "releaseDate":"",
                               "runtime":""}]....(skip)

Класс POJO - SearchItem.class

public class SearchItem {

@SerializedName("Query")
@Expose
private String query;
@SerializedName("KMAQuery")
@Expose
private String kMAQuery;
@SerializedName("TotalCount")
@Expose
private Integer totalCount;
@SerializedName("Data")
@Expose
private List<Data> data = null;

/**
 * No args constructor for use in serialization
 *
 */
public SearchItem() {
}

/**
 *
 * @param totalCount
 * @param query
 * @param data
 * @param kMAQuery
 */
public SearchItem(String query, String kMAQuery, Integer totalCount, List<Data> data) {
    super();
    this.query = query;
    this.kMAQuery = kMAQuery;
    this.totalCount = totalCount;
    this.data = data;
}

public String getQuery() {
    return query;
}

public void setQuery(String query) {
    this.query = query;
}

public String getKMAQuery() {
    return kMAQuery;
}

public void setKMAQuery(String kMAQuery) {
    this.kMAQuery = kMAQuery;
}

public Integer getTotalCount() {
    return totalCount;
}

public void setTotalCount(Integer totalCount) {
    this.totalCount = totalCount;
}

public List<Data> getData() {
    return data;
}

public void setData(List<Data> data) {
    this.data = data;
}

}

Класс POJO- Data.class

public class Data {

@SerializedName("CollName")
@Expose
private String collName;
@SerializedName("TotalCount")
@Expose
private Integer totalCount;
@SerializedName("Count")
@Expose
private Integer count;
@SerializedName("Result")
@Expose
private List<Result> result = null;

/**
 * No args constructor for use in serialization
 *
 */
public Data() {
}

/**
 *
 * @param result
 * @param collName
 * @param count
 * @param totalCount
 */
public Data(String collName, Integer totalCount, Integer count, List<Result> result) {
    super();
    this.collName = collName;
    this.totalCount = totalCount;
    this.count = count;
    this.result = result;
}

public String getCollName() {
    return collName;
}

public void setCollName(String collName) {
    this.collName = collName;
}

public Integer getTotalCount() {
    return totalCount;
}

public void setTotalCount(Integer totalCount) {
    this.totalCount = totalCount;
}

public Integer getCount() {
    return count;
}

public void setCount(Integer count) {
    this.count = count;
}

public List<Result> getResult() {
    return result;
}

public void setResult(List<Result> result) {
    this.result = result;
}

}

Класс POJO - Результат.Класс

public class Result {

@SerializedName("title")
@Expose
private String title;
@SerializedName("director")
@Expose
private List<Director> director = null;
@SerializedName("actor")
@Expose
private List<Actor> actor = null;
@SerializedName("nation")
@Expose
private String nation;
@SerializedName("company")
@Expose
private String company;
@SerializedName("plot")
@Expose
private String plot;
@SerializedName("runtime")
@Expose
private String runtime;
@SerializedName("genre")
@Expose
private String genre;
@SerializedName("kmdbUrl")
@Expose
private String kmdbUrl;
@SerializedName("rating")
@Expose
private List<Rating> rating = null;
@SerializedName("posters")
@Expose
private String posters;
@SerializedName("stlls")
@Expose
private String stlls;
@SerializedName("vod")
@Expose
private List<Vod> vod = null;
@SerializedName("salesAcc")
@Expose
private String salesAcc;
@SerializedName("audiAcc")
@Expose
private String audiAcc;

/**
 * No args constructor for use in serialization
 *
 */
public Result() {
}

/**
 *
 * @param genre
 * @param runtime
 * @param vod
 * @param actor
 * @param audiAcc
 * @param director
 * @param nation
 * @param plot
 * @param salesAcc
 * @param title
 * @param company
 * @param kmdbUrl
 * @param rating
 * @param posters
 * @param stlls
 */
public Result(String title, List<Director> director, List<Actor> actor, String nation, String company, String plot, String runtime, String genre, String kmdbUrl, List<Rating> rating, String posters, String stlls, List<Vod> vod, String salesAcc, String audiAcc) {
    super();
    this.title = title;
    this.director = director;
    this.actor = actor;
    this.nation = nation;
    this.company = company;
    this.plot = plot;
    this.runtime = runtime;
    this.genre = genre;
    this.kmdbUrl = kmdbUrl;
    this.rating = rating;
    this.posters = posters;
    this.stlls = stlls;
    this.vod = vod;
    this.salesAcc = salesAcc;
    this.audiAcc = audiAcc;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public List<Director> getDirector() {
    return director;
}

public void setDirector(List<Director> director) {
    this.director = director;
}

public List<Actor> getActor() {
    return actor;
}

public void setActor(List<Actor> actor) {
    this.actor = actor;
}

public String getNation() {
    return nation;
}

public void setNation(String nation) {
    this.nation = nation;
}

public String getCompany() {
    return company;
}

public void setCompany(String company) {
    this.company = company;
}

public String getPlot() {
    return plot;
}

public void setPlot(String plot) {
    this.plot = plot;
}

public String getRuntime() {
    return runtime;
}

public void setRuntime(String runtime) {
    this.runtime = runtime;
}

public String getGenre() {
    return genre;
}

public void setGenre(String genre) {
    this.genre = genre;
}

public String getKmdbUrl() {
    return kmdbUrl;
}

public void setKmdbUrl(String kmdbUrl) {
    this.kmdbUrl = kmdbUrl;
}

public List<Rating> getRating() {
    return rating;
}

public void setRating(List<Rating> rating) {
    this.rating = rating;
}

public String getPosters() {
    return posters;
}

public void setPosters(String posters) {
    this.posters = posters;
}

public String getStlls() {
    return stlls;
}

public void setStlls(String stlls) {
    this.stlls = stlls;
}

public List<Vod> getVod() {
    return vod;
}

public void setVod(List<Vod> vod) {
    this.vod = vod;
}

public String getSalesAcc() {
    return salesAcc;
}

public void setSalesAcc(String salesAcc) {
    this.salesAcc = salesAcc;
}

public String getAudiAcc() {
    return audiAcc;
}

public void setAudiAcc(String audiAcc) {
    this.audiAcc = audiAcc;
}

}

Класс POJO - Директор.Класс

public class Director {

@SerializedName("directorNm")
@Expose
private String directorNm;
@SerializedName("directorId")
@Expose
private String directorId;

/**
 * No args constructor for use in serialization
 *
 */
public Director() {
}

/**
 *
 * @param directorNm
 * @param directorId
 */
public Director(String directorNm, String directorId) {
    super();
    this.directorNm = directorNm;
    this.directorId = directorId;
}

public String getDirectorNm() {
    return directorNm;
}

public void setDirectorNm(String directorNm) {
    this.directorNm = directorNm;
}

public String getDirectorId() {
    return directorId;
}

public void setDirectorId(String directorId) {
    this.directorId = directorId;
}

}

Актеры, видео и классы не указаны.

Вот мой SearchActivity

public class SearchAsyncTask extends AsyncTask<String, Void, SearchItem[]> {

    String serviceKey = getString(R.string.kmdb_key_test);
    CharSequence queryText = mSearchView.getQuery();
    OkHttpClient mOkHttpClient = new OkHttpClient();
    SearchItem[] posts;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected SearchItem[] doInBackground(String... params) {

        HttpUrl.Builder urlBuilder = HttpUrl
                .parse("http://api.koreafilm.or.kr/openapi-data2/wisenut/search_api/search_json.jsp")
                .newBuilder();
        urlBuilder.addQueryParameter("ServiceKey", serviceKey);
        urlBuilder.addQueryParameter("collection", "kmdb_new");
        urlBuilder.addQueryParameter("sort", "prodYear");
        urlBuilder.addQueryParameter("title", String.valueOf(queryText));

        String url = urlBuilder.build().toString();
        Request request = new Request.Builder().url(url).build();

        try {

            Response response = mOkHttpClient.newCall(request).execute();
            Gson gson = new GsonBuilder().create();
            JsonParser mJsonParser = new JsonParser();

            JsonElement allElement = mJsonParser.parse(response.body().charStream());
            SearchItem mSearchItem = gson.fromJson(allElement, SearchItem.class);;

            for (Data i : mSearchItem.getData()) {

                for (Result k : i.getResult()) {

                    for (Actor a : k.getActor()) {

                    }

                    for (Director d : k.getDirector()) {
                    }

                    for (Vod v : k.getVod()) {

                    }

                    for (Rating r : k.getRating()) {

                    }
                }
            }

            //posts = gson.fromJson(allElement, SearchItem[].class);
            //return posts;

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;        }

    @Override
    protected void onPostExecute(SearchItem[] result) {
        super.onPostExecute(result);

        mSearchItem = new ArrayList<>();

        if (result.length > 0) {
            mSearchItem.addAll(Arrays.asList(result));
        } else {

        }

        mSearchRecyclerAdapter = new SearchRecyclerAdapter(getApplicationContext(), mSearchItem);
        mRecyclerView.setAdapter(mSearchRecyclerAdapter);
    }
}
  1. Как анализировать несколькоВложенный JSON с Gson
  2. Как сразу вернуться на onPostExecute

Пожалуйста, мне нужна ваша помощь. !!

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