如何通过Retrofit 2使用这个JSON结构?

时间:2016-06-23 22:33:07

标签: android json retrofit

您好我有一个json结构,我需要从url获取数据。我怎样才能做到这一点?什么是类和功能。请帮我。感谢。

这是我的json。

{
nodes: [
{
node: {
title: "...",
field_news_image: [
{title="..."},
{title="..."},
{title="..."},
{title="..."},
{title="..."},
{title="..."},
{title="..."}
],
body: "...",
field_category: "...",
created: "..."
}
},
{
node: {
title: "...",
field_news_image: [
{title="..."},
{title="..."},
{title="..."},
{title="..."},
{title="..."}
],
body: "...",
field_category: "...",
created: "..."
}
}
]
}

2 个答案:

答案 0 :(得分:1)

使用jsonschema2pojo.org粘贴您的响应,它将为您生成Java类。 您可以通过设置所有必需的组件来实例化Retrofit实例:

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BuildConfig.BASE_URL)
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

,您的界面将如下所示:

@GET("api/service/schedule/{filial}")
    Observable<Response<List<Event>>> getSchedule(@Path("filial") String filial);

其中@ GET-注释定义请求类型, 应答LT;&GT; - Retrofit使用的类型,包含响应是否成功的信息(参见类方法)。 可观察到的与LT;&GT; - 从rxJava库中键入,允许以反应方式处理请求。 我强烈建议使用RxJava,因为它非常简化了后台执行。 (不要使用AsyncTasks !!)。

为了使用Retrofit2,请将以下行添加到Gradle文件中:

   //Reactive programming
    compile 'io.reactivex:rxjava:1.1.5'
    compile 'io.reactivex:rxandroid:1.2.0'


    compile 'com.google.code.gson:gson:2.4'
    //retrofit and okhttp
    compile 'com.squareup.okhttp3:okhttp:3.2.0'
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

您将通过类似的调用实例化Retrofit2接口: retrofit.create(Api.class)

答案 1 :(得分:1)

<强> http://www.jsonschema2pojo.org/

将您的JSON响应放在此处,并从此网站下载Java代码。然后将这个java代码放入您的项目并使用它。本网站将提供所有必需的课程,其中包含所有必填字段,非常适合您对JSON的回复。我已经用了很多次这肯定会有用。

http://square.github.io/retrofit/ 在这里,您可以获得有关如何使用改装POST或获取数据的详细信息。

Retrofit将您的HTTP API转变为Java接口。

public interface YourService {
  @GET("users/{user}/repos")
  Call<List<Repository>> listRepos(@Path("user") String user);
}

Retrofit类生成接口的实现。

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.yourAPI.com/")
    .build();

YourService  service = retrofit.create(YourService .class);

Call<List<Repository>> repos = service.listRepos("myrepository");

使用注释来描述 HTTP 请求:

  • URL参数替换和查询参数支持对象 转换为请求主体(例如,JSON,协议缓冲区)Multipart 请求正文和文件上传