如何使用改造 2 在 Android 中获取 Json,如下面的代码所示?
How to fetch Json in Android using retrofit 2 as shown in below code?
api url: "http://btownmedia.com/?json=get_category_posts&slug=flex-print&status=publish"
我的json如下图:
{
"status": "ok",
"count": 1,
"pages": 1,
"category": {
"id": 44,
"slug": "flex-print",
"title": "Flex Print",
"description": "Flex Print",
"parent": 7,
"post_count": 1
},
"posts": [
{
"id": 343,
"type": "post",
"slug": "nk-advertising",
"url": "https://btownmedia.com/2018/10/10/nk-advertising/",
"status": "publish",
"title": "NK Advertising",
"title_plain": "NK Advertising",
"content": "<p style=\"color: #7a6666; font-family: roboto-regular-webfont; font-size: 14px; line-height: 24px; margin: 0px; padding: 0px 0px 19px; width: 370px;\"><strong>Online advertisement:</strong> <em>Online advertisement on our website</em> means our basic service. Your business card or a visiting card sized advertisement is displayed on our website for pre-mentioned time frame.</p>\n<p style=\"color: #7a6666; font-family: roboto-regular-webfont; font-size: 14px; line-height: 24px; margin: 0px; padding: 0px 0px 19px; width: 370px;\"><strong>Personalized page:</strong> We offer you a personalized page, designed for your business with all the details of your business- linked with your advertisement that opens when clicked.</p>\n",
"excerpt": "<p>Online advertisement on our website means our basic service. Your business card or a visiting card sized advertisement is displayed on our website for pre-mentioned time frame.</p>\n",
"date": "2018-10-10 08:08:29",
"modified": "2018-10-10 08:08:29",
"categories": [
{
"id": 44,
"slug": "flex-print",
"title": "Flex Print",
"description": "Flex Print",
"parent": 7,
"post_count": 1
}
],
"tags": [],
"author": {
"id": 1,
"slug": "admin",
"name": "admin",
"first_name": "",
"last_name": "",
"nickname": "admin",
"url": "",
"description": ""
},
"comments": [],
"attachments": [
{
"id": 342,
"url": "https://btownmedia.com/nk/",
"slug": "nk",
"title": "nk",
"description": "",
"caption": "",
"parent": 343,
"mime_type": "image/png",
"images": {
"full": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"thumbnail": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"medium": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"medium_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpg_gallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"rpg_gallery_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"estore-featured-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-product-grid": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-75x75.png",
"width": 75,
"height": 75
},
"estore-square": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-slider": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-medium-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
}
}
}
],
"comment_count": 0,
"comment_status": "open",
"thumbnail": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"custom_fields": {},
"thumbnail_size": "thumbnail",
"thumbnail_images": {
"full": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"thumbnail": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"medium": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"medium_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpg_gallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"rpg_gallery_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"estore-featured-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-product-grid": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-75x75.png",
"width": 75,
"height": 75
},
"estore-square": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-slider": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-medium-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
}
}
}
]}
波乔 Class:
public class Post {
private Integer id;
private String type;
private String slug;
private String url;
private String status;
private String title;
private String titlePlain;
private String content;
private String excerpt;
private String date;
private String modified;
private List<Object> tags = null;
private List<Object> comments = null;
private Integer commentCount;
private String commentStatus;
private String thumbnail;
private String thumbnailSize;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitlePlain() {
return titlePlain;
}
public void setTitlePlain(String titlePlain) {
this.titlePlain = titlePlain;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getExcerpt() {
return excerpt;
}
public void setExcerpt(String excerpt) {
this.excerpt = excerpt;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getModified() {
return modified;
}
public void setModified(String modified) {
this.modified = modified;
}
public List<Object> getTags() {
return tags;
}
public void setTags(List<Object> tags) {
this.tags = tags;
}
public List<Object> getComments() {
return comments;
}
public void setComments(List<Object> comments) {
this.comments = comments;
}
public Integer getCommentCount() {
return commentCount;
}
public void setCommentCount(Integer commentCount) {
this.commentCount = commentCount;
}
public String getCommentStatus() {
return commentStatus;
}
public void setCommentStatus(String commentStatus) {
this.commentStatus = commentStatus;
}
public String getThumbnail() {
return thumbnail;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
public String getThumbnailSize() {
return thumbnailSize;
}
public void setThumbnailSize(String thumbnailSize) {
this.thumbnailSize = thumbnailSize;
}
}
接口API
@GET("json=get_category_posts&slug=flex-print&status=publish")
Call<Post> getListPost();
MainActivity.java
void getListPosts() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url1)
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitArrayAPI service = retrofit.create(RetrofitArrayAPI.class);
Log.d("service", String.valueOf(""));
Call<Post> call = service.getListPost();
call.enqueue(new Callback<Post>() {
@Override
public void onResponse(Response<Post> response, Retrofit retrofit) {
try {
Log.d("Title", String.valueOf(response.body()));
} catch (Exception e) {
Log.d("onResponse", "There is an error");
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable t) {
Log.d("onFailure", t.toString());
}
});
}
如何获取 json 中的 "posts" 数组?我已经按照上面的程序进行了尝试。
谁能帮帮我。在上面的所有程序中,我只想获取 android.
中的帖子数组
"posts": [
{
"id": 343,
"type": "post",
"slug": "nk-advertising",
"url": "https://btownmedia.com/2018/10/10/nk-advertising/",
"status": "publish",
"title": "NK Advertising",
"title_plain": "NK Advertising",
"content": "<p style=\"color: #7a6666; font-family: roboto-regular-webfont; font-size: 14px; line-height: 24px; margin: 0px; padding: 0px 0px 19px; width: 370px;\"><strong>Online advertisement:</strong> <em>Online advertisement on our website</em> means our basic service. Your business card or a visiting card sized advertisement is displayed on our website for pre-mentioned time frame.</p>\n<p style=\"color: #7a6666; font-family: roboto-regular-webfont; font-size: 14px; line-height: 24px; margin: 0px; padding: 0px 0px 19px; width: 370px;\"><strong>Personalized page:</strong> We offer you a personalized page, designed for your business with all the details of your business- linked with your advertisement that opens when clicked.</p>\n",
"excerpt": "<p>Online advertisement on our website means our basic service. Your business card or a visiting card sized advertisement is displayed on our website for pre-mentioned time frame.</p>\n",
"date": "2018-10-10 08:08:29",
"modified": "2018-10-10 08:08:29",
"categories": [
{
"id": 44,
"slug": "flex-print",
"title": "Flex Print",
"description": "Flex Print",
"parent": 7,
"post_count": 1
}
],
"tags": [],
"author": {
"id": 1,
"slug": "admin",
"name": "admin",
"first_name": "",
"last_name": "",
"nickname": "admin",
"url": "",
"description": ""
},
"comments": [],
"attachments": [
{
"id": 342,
"url": "https://btownmedia.com/nk/",
"slug": "nk",
"title": "nk",
"description": "",
"caption": "",
"parent": 343,
"mime_type": "image/png",
"images": {
"full": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"thumbnail": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"medium": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"medium_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpg_gallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"rpg_gallery_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"estore-featured-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-product-grid": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-75x75.png",
"width": 75,
"height": 75
},
"estore-square": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-slider": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-medium-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
}
}
}
],
"comment_count": 0,
"comment_status": "open",
"thumbnail": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"custom_fields": {},
"thumbnail_size": "thumbnail",
"thumbnail_images": {
"full": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"thumbnail": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"medium": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"medium_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpg_gallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"rpg_gallery_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"estore-featured-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-product-grid": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-75x75.png",
"width": 75,
"height": 75
},
"estore-square": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-slider": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-medium-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
}
}
}
]
最简单的解决方案是为您的 api returns 的整个对象创建一个上部 class,然后从中获取您的帖子?
类似于:
class APIResponse {
public List<Post> posts;
// add the other fields from your response if you need them
}
那么你只需要用
替换你的电话
@GET("json=get_category_posts&slug=flex-print&status=publish")
Call<APIResponse> getListPost();
然后您将能够像 response.posts
一样轻松访问帖子列表
然而,如果你不想有一个上层 class 而是直接的帖子列表,你可能需要使用自定义反序列化器。像这样:
public static class PostAdapter implements JsonDeserializer<List<Post>> {
public List<Post> deserialize(JsonElement jsonElement, Type typeOfT, JsonDeserializationContext ctx) {
JsonObject json = jsonElement.getAsJsonObject();
List<Post> vals = new ArrayList<>();
if (json.has("posts") && .json.get("posts").isJsonArray()) {
for (JsonElement e : json.get("posts").getAsJsonArray()) {
vals.add((Post) ctx.deserialize(e, Post.class));
}
}
return vals;
}
}
您可以在创建改装服务时注册到您的 gson 构建器:
Type postListType = new TypeToken<List<Post>>() {}.getType();
Gson gson = new GsonBuilder()
.registerTypeAdapter(postListType, new PostAdapter())
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url1)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
通过这样做,每次您在 interfaceAPI 中声明一个 Call> 时,它都会使用此适配器来获得正确的结果。所以现在你可以做
@GET("json=get_category_posts&slug=flex-print&status=publish")
Call<List<Post>> getListPost();
Post.java
public class Post {
private Integer id;
private String type;
private String slug;
private String url;
private String status;
private String title;
private String titlePlain;
private String content;
private String excerpt;
private String thumbnail;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitlePlain() {
return titlePlain;
}
public void setTitlePlain(String titlePlain) {
this.titlePlain = titlePlain;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getExcerpt() {
return excerpt;
}
public void setExcerpt(String excerpt) {
this.excerpt = excerpt;
}
public String getThumbnail() {
return thumbnail;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
}
PostArtical.java
public class PostArtical {
private String status;
private Integer count;
private Integer pages;
private Category category;
private List<Post> posts = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public Integer getPages() {
return pages;
}
public void setPages(Integer pages) {
this.pages = pages;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public List<Post> getPosts() {
return posts;
}
public void setPosts(List<Post> posts) {
this.posts = posts;
}
}
Category.java
public class Category {
private Integer id;
private String slug;
private String title;
private String description;
private Integer parent;
private Integer postCount;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getParent() {
return parent;
}
public void setParent(Integer parent) {
this.parent = parent;
}
public Integer getPostCount() {
return postCount;
}
public void setPostCount(Integer postCount) {
this.postCount = postCount;
}
}
MainActivity.java
//onCreate方法内部
onCreate method{
getRetrofitPostObject();
}
//在onCreate方法之外
void getRetrofitPostObject() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(urlp)
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitObjectAPI service = retrofit.create(RetrofitObjectAPI.class);
Call<PostArtical> call = service.getPostDetails();
call.enqueue(new Callback<PostArtical>() {
@Override
public void onResponse(Response<PostArtical> response, Retrofit retrofit) {
try {
Log.d("Category", response.body().getCategory().getTitle());
Log.d("PostText", response.body().getPosts().get(0).getTitle());
List<Post> PostData = response.body().getPosts();
for (int i = 0; i < PostData.size(); i++) {
if (i == 0) {
text_id_1.setText("id : " + PostData.get(i).getId());
Log.d("Atrical[0]", String.valueOf(PostData.get(i).getId()));
Log.d("Atrical[title]", String.valueOf(PostData.get(i).getTitle()));
Log.d("Atrical[content]", String.valueOf(PostData.get(i).getContent()).replaceAll("(<[^>]+>)|(&[^;]+;)",""));
Log.d("Atrical[Excerpt]", String.valueOf(PostData.get(i).getExcerpt()).replaceAll("(<[^>]+>)|(&[^;]+;)",""));
Log.d("Atrical[image]", String.valueOf(PostData.get(i).getThumbnail()));
img = PostData.get(i).getThumbnail();
DownloadImageWithURLTask downloadTask = new DownloadImageWithURLTask(imageview);
downloadTask.execute(img);
// text_name_1.setText("title : " + StudentData.get(i).getTitle());
}
}
// text_id_1.setText("PostStatus : " + response.body().getStatus());
text_name_1.setText("PostCount : " + response.body().getCount());
text_marks_1.setText("PostPage : " + response.body().getPages());
} catch (Exception e) {
Log.d("onResponse", "There is an error");
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable t) {
Log.d("onFailure", t.toString());
}
});
}
api url: "http://btownmedia.com/?json=get_category_posts&slug=flex-print&status=publish"
我的json如下图:
{
"status": "ok",
"count": 1,
"pages": 1,
"category": {
"id": 44,
"slug": "flex-print",
"title": "Flex Print",
"description": "Flex Print",
"parent": 7,
"post_count": 1
},
"posts": [
{
"id": 343,
"type": "post",
"slug": "nk-advertising",
"url": "https://btownmedia.com/2018/10/10/nk-advertising/",
"status": "publish",
"title": "NK Advertising",
"title_plain": "NK Advertising",
"content": "<p style=\"color: #7a6666; font-family: roboto-regular-webfont; font-size: 14px; line-height: 24px; margin: 0px; padding: 0px 0px 19px; width: 370px;\"><strong>Online advertisement:</strong> <em>Online advertisement on our website</em> means our basic service. Your business card or a visiting card sized advertisement is displayed on our website for pre-mentioned time frame.</p>\n<p style=\"color: #7a6666; font-family: roboto-regular-webfont; font-size: 14px; line-height: 24px; margin: 0px; padding: 0px 0px 19px; width: 370px;\"><strong>Personalized page:</strong> We offer you a personalized page, designed for your business with all the details of your business- linked with your advertisement that opens when clicked.</p>\n",
"excerpt": "<p>Online advertisement on our website means our basic service. Your business card or a visiting card sized advertisement is displayed on our website for pre-mentioned time frame.</p>\n",
"date": "2018-10-10 08:08:29",
"modified": "2018-10-10 08:08:29",
"categories": [
{
"id": 44,
"slug": "flex-print",
"title": "Flex Print",
"description": "Flex Print",
"parent": 7,
"post_count": 1
}
],
"tags": [],
"author": {
"id": 1,
"slug": "admin",
"name": "admin",
"first_name": "",
"last_name": "",
"nickname": "admin",
"url": "",
"description": ""
},
"comments": [],
"attachments": [
{
"id": 342,
"url": "https://btownmedia.com/nk/",
"slug": "nk",
"title": "nk",
"description": "",
"caption": "",
"parent": 343,
"mime_type": "image/png",
"images": {
"full": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"thumbnail": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"medium": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"medium_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpg_gallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"rpg_gallery_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"estore-featured-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-product-grid": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-75x75.png",
"width": 75,
"height": 75
},
"estore-square": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-slider": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-medium-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
}
}
}
],
"comment_count": 0,
"comment_status": "open",
"thumbnail": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"custom_fields": {},
"thumbnail_size": "thumbnail",
"thumbnail_images": {
"full": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"thumbnail": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"medium": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"medium_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpg_gallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"rpg_gallery_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"estore-featured-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-product-grid": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-75x75.png",
"width": 75,
"height": 75
},
"estore-square": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-slider": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-medium-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
}
}
}
]}
波乔 Class:
public class Post {
private Integer id;
private String type;
private String slug;
private String url;
private String status;
private String title;
private String titlePlain;
private String content;
private String excerpt;
private String date;
private String modified;
private List<Object> tags = null;
private List<Object> comments = null;
private Integer commentCount;
private String commentStatus;
private String thumbnail;
private String thumbnailSize;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitlePlain() {
return titlePlain;
}
public void setTitlePlain(String titlePlain) {
this.titlePlain = titlePlain;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getExcerpt() {
return excerpt;
}
public void setExcerpt(String excerpt) {
this.excerpt = excerpt;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getModified() {
return modified;
}
public void setModified(String modified) {
this.modified = modified;
}
public List<Object> getTags() {
return tags;
}
public void setTags(List<Object> tags) {
this.tags = tags;
}
public List<Object> getComments() {
return comments;
}
public void setComments(List<Object> comments) {
this.comments = comments;
}
public Integer getCommentCount() {
return commentCount;
}
public void setCommentCount(Integer commentCount) {
this.commentCount = commentCount;
}
public String getCommentStatus() {
return commentStatus;
}
public void setCommentStatus(String commentStatus) {
this.commentStatus = commentStatus;
}
public String getThumbnail() {
return thumbnail;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
public String getThumbnailSize() {
return thumbnailSize;
}
public void setThumbnailSize(String thumbnailSize) {
this.thumbnailSize = thumbnailSize;
}
}
接口API
@GET("json=get_category_posts&slug=flex-print&status=publish")
Call<Post> getListPost();
MainActivity.java
void getListPosts() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url1)
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitArrayAPI service = retrofit.create(RetrofitArrayAPI.class);
Log.d("service", String.valueOf(""));
Call<Post> call = service.getListPost();
call.enqueue(new Callback<Post>() {
@Override
public void onResponse(Response<Post> response, Retrofit retrofit) {
try {
Log.d("Title", String.valueOf(response.body()));
} catch (Exception e) {
Log.d("onResponse", "There is an error");
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable t) {
Log.d("onFailure", t.toString());
}
});
}
如何获取 json 中的 "posts" 数组?我已经按照上面的程序进行了尝试。 谁能帮帮我。在上面的所有程序中,我只想获取 android.
中的帖子数组 "posts": [
{
"id": 343,
"type": "post",
"slug": "nk-advertising",
"url": "https://btownmedia.com/2018/10/10/nk-advertising/",
"status": "publish",
"title": "NK Advertising",
"title_plain": "NK Advertising",
"content": "<p style=\"color: #7a6666; font-family: roboto-regular-webfont; font-size: 14px; line-height: 24px; margin: 0px; padding: 0px 0px 19px; width: 370px;\"><strong>Online advertisement:</strong> <em>Online advertisement on our website</em> means our basic service. Your business card or a visiting card sized advertisement is displayed on our website for pre-mentioned time frame.</p>\n<p style=\"color: #7a6666; font-family: roboto-regular-webfont; font-size: 14px; line-height: 24px; margin: 0px; padding: 0px 0px 19px; width: 370px;\"><strong>Personalized page:</strong> We offer you a personalized page, designed for your business with all the details of your business- linked with your advertisement that opens when clicked.</p>\n",
"excerpt": "<p>Online advertisement on our website means our basic service. Your business card or a visiting card sized advertisement is displayed on our website for pre-mentioned time frame.</p>\n",
"date": "2018-10-10 08:08:29",
"modified": "2018-10-10 08:08:29",
"categories": [
{
"id": 44,
"slug": "flex-print",
"title": "Flex Print",
"description": "Flex Print",
"parent": 7,
"post_count": 1
}
],
"tags": [],
"author": {
"id": 1,
"slug": "admin",
"name": "admin",
"first_name": "",
"last_name": "",
"nickname": "admin",
"url": "",
"description": ""
},
"comments": [],
"attachments": [
{
"id": 342,
"url": "https://btownmedia.com/nk/",
"slug": "nk",
"title": "nk",
"description": "",
"caption": "",
"parent": 343,
"mime_type": "image/png",
"images": {
"full": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"thumbnail": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"medium": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"medium_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpg_gallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"rpg_gallery_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"estore-featured-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-product-grid": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-75x75.png",
"width": 75,
"height": 75
},
"estore-square": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-slider": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-medium-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
}
}
}
],
"comment_count": 0,
"comment_status": "open",
"thumbnail": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"custom_fields": {},
"thumbnail_size": "thumbnail",
"thumbnail_images": {
"full": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"thumbnail": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"medium": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"medium_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpggallery_admin_large": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"rpg_gallery_admin_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"rpg_gallery_thumb": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-150x142.png",
"width": 150,
"height": 142
},
"estore-featured-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-product-grid": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk-75x75.png",
"width": 75,
"height": 75
},
"estore-square": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-slider": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
},
"estore-medium-image": {
"url": "https://btownmedia.com/wp-content/uploads/2018/10/nk.png",
"width": 230,
"height": 142
}
}
}
]
最简单的解决方案是为您的 api returns 的整个对象创建一个上部 class,然后从中获取您的帖子?
类似于:
class APIResponse {
public List<Post> posts;
// add the other fields from your response if you need them
}
那么你只需要用
替换你的电话@GET("json=get_category_posts&slug=flex-print&status=publish")
Call<APIResponse> getListPost();
然后您将能够像 response.posts
然而,如果你不想有一个上层 class 而是直接的帖子列表,你可能需要使用自定义反序列化器。像这样:
public static class PostAdapter implements JsonDeserializer<List<Post>> {
public List<Post> deserialize(JsonElement jsonElement, Type typeOfT, JsonDeserializationContext ctx) {
JsonObject json = jsonElement.getAsJsonObject();
List<Post> vals = new ArrayList<>();
if (json.has("posts") && .json.get("posts").isJsonArray()) {
for (JsonElement e : json.get("posts").getAsJsonArray()) {
vals.add((Post) ctx.deserialize(e, Post.class));
}
}
return vals;
}
}
您可以在创建改装服务时注册到您的 gson 构建器:
Type postListType = new TypeToken<List<Post>>() {}.getType();
Gson gson = new GsonBuilder()
.registerTypeAdapter(postListType, new PostAdapter())
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url1)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
通过这样做,每次您在 interfaceAPI 中声明一个 Call> 时,它都会使用此适配器来获得正确的结果。所以现在你可以做
@GET("json=get_category_posts&slug=flex-print&status=publish")
Call<List<Post>> getListPost();
Post.java
public class Post {
private Integer id;
private String type;
private String slug;
private String url;
private String status;
private String title;
private String titlePlain;
private String content;
private String excerpt;
private String thumbnail;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitlePlain() {
return titlePlain;
}
public void setTitlePlain(String titlePlain) {
this.titlePlain = titlePlain;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getExcerpt() {
return excerpt;
}
public void setExcerpt(String excerpt) {
this.excerpt = excerpt;
}
public String getThumbnail() {
return thumbnail;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
}
PostArtical.java
public class PostArtical {
private String status;
private Integer count;
private Integer pages;
private Category category;
private List<Post> posts = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public Integer getPages() {
return pages;
}
public void setPages(Integer pages) {
this.pages = pages;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public List<Post> getPosts() {
return posts;
}
public void setPosts(List<Post> posts) {
this.posts = posts;
}
}
Category.java
public class Category {
private Integer id;
private String slug;
private String title;
private String description;
private Integer parent;
private Integer postCount;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getParent() {
return parent;
}
public void setParent(Integer parent) {
this.parent = parent;
}
public Integer getPostCount() {
return postCount;
}
public void setPostCount(Integer postCount) {
this.postCount = postCount;
}
}
MainActivity.java
//onCreate方法内部
onCreate method{
getRetrofitPostObject();
}
//在onCreate方法之外
void getRetrofitPostObject() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(urlp)
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitObjectAPI service = retrofit.create(RetrofitObjectAPI.class);
Call<PostArtical> call = service.getPostDetails();
call.enqueue(new Callback<PostArtical>() {
@Override
public void onResponse(Response<PostArtical> response, Retrofit retrofit) {
try {
Log.d("Category", response.body().getCategory().getTitle());
Log.d("PostText", response.body().getPosts().get(0).getTitle());
List<Post> PostData = response.body().getPosts();
for (int i = 0; i < PostData.size(); i++) {
if (i == 0) {
text_id_1.setText("id : " + PostData.get(i).getId());
Log.d("Atrical[0]", String.valueOf(PostData.get(i).getId()));
Log.d("Atrical[title]", String.valueOf(PostData.get(i).getTitle()));
Log.d("Atrical[content]", String.valueOf(PostData.get(i).getContent()).replaceAll("(<[^>]+>)|(&[^;]+;)",""));
Log.d("Atrical[Excerpt]", String.valueOf(PostData.get(i).getExcerpt()).replaceAll("(<[^>]+>)|(&[^;]+;)",""));
Log.d("Atrical[image]", String.valueOf(PostData.get(i).getThumbnail()));
img = PostData.get(i).getThumbnail();
DownloadImageWithURLTask downloadTask = new DownloadImageWithURLTask(imageview);
downloadTask.execute(img);
// text_name_1.setText("title : " + StudentData.get(i).getTitle());
}
}
// text_id_1.setText("PostStatus : " + response.body().getStatus());
text_name_1.setText("PostCount : " + response.body().getCount());
text_marks_1.setText("PostPage : " + response.body().getPages());
} catch (Exception e) {
Log.d("onResponse", "There is an error");
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable t) {
Log.d("onFailure", t.toString());
}
});
}