Я получил значения 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);
}
}
- Как анализировать несколькоВложенный JSON с Gson
- Как сразу вернуться на onPostExecute
Пожалуйста, мне нужна ваша помощь. !!