Я новичок в модернизации, и я не уверен, как обращаться с такой структурой json. если кто-нибудь может помочь, как разобрать этот тип структуры. я бы действительно оценил это. я застрял на несколько дней

{
"status": "ok",
"totalResults": 20,
"articles": [
{
"source": {
"id": null,
"name": "Bradenton.com"
},
"author": "By EILEEN NG  Associated Press",
"title": "Malaysia says search for missing plane to end in June",
"description": "An official says the search for Malaysia Airlines Flight 370 by a U.S. company will likely end in June, as families of passengers marked the fourth anniversary of the plane's disappearance with hope that the world's biggest aviation mystery will be solved.",
"url": "http://www.bradenton.com/news/business/article203286984.html",
"urlToImage": "http://www.mcclatchy-wires.com/incoming/ukogzw/picture203286949/alternates/LANDSCAPE_1140/Malaysia_Missing_Plane_57970.jpg",
"publishedAt": "2018-03-03T09:42:00Z"
}
]
}
1
Salman Khan 3 Мар 2018 в 16:14

5 ответов

Лучший ответ

http://www.jsonschema2pojo.org/, чтобы преобразовать ваш json в POJO и использовать его для модернизации 2.3

2
Sabid Habib 3 Мар 2018 в 13:23

Хорошо при работе с модернизацией я предлагаю использовать библиотеку Gson с ней, которая анализирует ваш json для типа объекта, который вам следует создали так, сначала вы должны создать объект, представляющий ваш объект из полученного ответа, так что это будет что-то вроде этого в вашем случае

public class Article implements Serializable {
private String author;
private String title;
private String description;
private String url;
private String urlToImage;
private String publishedAt;
private Source source;

public Story() {

}

public Story(String author,
             String title,
             Source source,
             String description,
             String url,
             String urlToImage,
             String publishedAt) {

    this.author = author;
    this.title = title;
    this.source = source;
    this.url = url;
    this.urlToImage = urlToImage;
    this.publishedAt = publishedAt;
}

public String getAuthor() {
    return author;
}

public void setAuthor(String author) {
    this.author = author;
}

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 double getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

public String getUrlToImage() {
    return urlToImage;
}

public void setUrlToImage(String urlToImage) {
    this.urlToImage = urlToImage;
}

public String getPublishedAt() {
    return publishedAt;
}

public void setPublishedAt(String publishedAt) {
    this.publishedAt = publishedAt;
}

public Source getSource() {
    return source;
}

public void setSource(Source source) {
    this.source = source;
}
}

И аналогичным образом создайте свой другой класс, который является классом Source, содержащим ваш объект Source

public class Source implements Serializable {
   private id id;
   private String name;

   public Source() {

   }

   public Source(int id,
         String name) {

       this.id = id;
       this.name = name;
   }

   public int getId() {
      return id;
   }

   public void setId(int id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }

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

Теперь в своем коде API модернизации вы можете сделать что-то вроде этого

 @GET("YOUR_ENDPOINT/")
 Call<JsonObject> getArticles(... put your required fields here example ...@Query("token") String token);

И в своей деятельности делать что-то подобное

List mArticleList = new ArrayList<>();
String mTotalResults = "";
UserApi service  =  ServiceGenerator.createService(UserApi.class);
Call<JsonObject> result = service.getArticles(token);

result.enqueue(new Callback<JsonObject>() {
     @Override
     public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
        if (response.code() == 200) {
           mArticleList = null;
           JsonArray data = response.body().getAsJsonObject("data").getAsJsonArray("articles");
           mArticleList = new Gson().fromJson(data.toString(), new TypeToken<List<Article>>(){}.getType());
           mTotalResults = response.body().getAsJsonObject("data").getAsString("totalResults");
//if you want it as an integer you could do something like 
           int totalResults = Integer.parseInt(mTotalResults);
           //... do what you want with your list
           //...
         }
    }
            @Override
            public void onFailure(Call<JsonObject> call, Throwable t) {
                //do what you have to do in case of error
            }
        });
    }

Надеюсь это поможет

0
Ali Kaissi 3 Мар 2018 в 14:38

Если вы не знаете, сколько классов вам нужно сделать, просто скопируйте и вставьте свой json здесь нажмите здесь.

Это поможет вам и облегчит вашу работу.

1
Arjun 3 Мар 2018 в 13:25

Создайте несколько pojos:

class Source {
   String id;
   String name;
}

class Article{
   Source source;
   String author;
   String title;
   String description;
   String url;
   String urlToImage;
   String publishedAt;
}

class GetArticlesResponse{
   String status;
   int totalResults;
   List<Article> articles;
}

А затем передайте GetArticlesResponse вашему вызову дооснащения.

import retrofit2.Response;
import retrofit2.Call;
public interface YourInterface {
  @GET("your_end_point")
  Call<Response<GetArticlesResponse>> getArticles();
}

Или если вы используете RX:

import retrofit2.Response;
import rx.Observable;

public interface YourInterface {
  @GET("your_end_point")
  Observable<Response<GetArticlesResponse>> getArticles();
}
1
Levi Moreira 3 Мар 2018 в 13:27

MainClass.java

public class MainClass {

@SerializedName("status")
@Expose
private String status;
@SerializedName("totalResults")
@Expose
private Integer totalResults;
@SerializedName("articles")
@Expose
private List<Article> articles = null;

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public Integer getTotalResults() {
return totalResults;
}

public void setTotalResults(Integer totalResults) {
this.totalResults = totalResults; 
}

public List<Article> getArticles() {
return articles;
}

public void setArticles(List<Article> articles) {
this.articles = articles;
}

}

Article.java

public class Article {

 @SerializedName("source")
 @Expose
 private Source source;
 @SerializedName("author")
 @Expose
 private String author;
 @SerializedName("title")
 @Expose
 private String title;
 @SerializedName("description")
 @Expose
 private String description;
 @SerializedName("url")
 @Expose
 private String url;
 @SerializedName("urlToImage")
 @Expose
 private String urlToImage;
 @SerializedName("publishedAt")
 @Expose
 private String publishedAt;

 public Source getSource() {
 return source;
 }

 public void setSource(Source source) {
 this.source = source;
 }

 public String getAuthor() {
 return author;
 }

 public void setAuthor(String author) {
 this.author = author;
 }

 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 String getUrl() {
 return url;
 }

 public void setUrl(String url) {
 this.url = url;
 }

 public String getUrlToImage() {
 return urlToImage;
 }

 public void setUrlToImage(String urlToImage) {
 this.urlToImage = urlToImage;
 }

 public String getPublishedAt() {
 return publishedAt;
 }

 public void setPublishedAt(String publishedAt) {
 this.publishedAt = publishedAt;
 }

 }

Source.java

public class Source {

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

public Object getId() {
return id;
}

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

public String getName() {
return name;
}

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

}

Модифицированный интерфейс

public interface YourInterface {
@GET("whatever api u are using")
Call<MainClass> getData(@Query("whatever key") String/int(whatever name)) //or leave blank
}
0
Arpit todewale 3 Мар 2018 в 14:31