如何通过改造获得数据

时间:2019-05-08 15:50:36

标签: java android api retrofit

如何使用 Retrofit 获取此类JSON数据?我该如何解决这个问题?

MainActivity.java

Api.getClient().getCategoryList(new Callback<List<Movie>>() {
    @Override
    public void success(List<Movie> movies, Response response) {
        if (movies.get(0).getError().equalsIgnoreCase("false")) {
           itemsList1=movies;
           setCategorydataRecycle();
        }
    }
}
{
    "error": false,
    "category": [
        {
            "category_id": "1",
            "category_name": "Adults",
            "categroy_image": "assets/category-image/cat1.jpg"
        },
        {
            "category_id": "2",
            "category_name": "Kids",
            "categroy_image": "assets/category-image/cat1.jpg"
        },
        {
            "category_id": "3",
            "category_name": "Gym",
            "categroy_image": "assets/category-image/cat1.jpg"
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

如果您查看改造文档,则需要一些帮助使其正常工作。

  1. Api接口
  2. 改造实例和Http客户端(用于标头等)
  3. 服务类别

这是我们的API

 interface API {    
   @GET("/movies")
   Call<MovieResponse> retrieveMovies();
 }

我们必须创建电影响应数据对象。

class MovieResponse {
    List<Movie> movies;
    boolean error;
}

现在我们有了服务,让我们创建一个简单的Retrofit工厂,它将为我们创建Retrofit。

public class RetrofitFactory {

    private static final String BASE_URL = "www.myurl.com";
    private Retrofit mRetrofit = null;

    public static Retrofit create(){
        if(mRetrofit == null){
            return createRetrofit();
        }
        return mRetrofit;
    }

    private static Retrofit createRetrofit(){
        return new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(createOkHttpClient())
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();
    }

    private  static OkHttpClient createOkHttpClient(){
        return new OkHttpClient().newBuilder().addInterceptor(new Interceptor() {
            @Override
            public okhttp3.Response intercept(Chain chain) throws IOException {
                Request originalRequest = chain.request();

                Request.Builder builder = originalRequest.newBuilder().header("Authorization",
                    Credentials.basic("aUsername", "aPassword"));

                Request newRequest = builder.build();
                return chain.proceed(newRequest);
            }
        }).build();
    }
}

我们的简单服务类别将是。

public class Services {
    public static  API getMoviesService(){
        return RetrofitFactory.create().create(API.class);
    }
}

现在我们拥有了系统所需的所有组件,下面是如何将它们粘合在一起。

public class MoviesRepository {

    public void retrieveMovies() {
        API api = Services.getMoviesService();
        Call <MovieResponse> call = api.retrieveMovies();
        call.enqueue(new Callback<MovieResponse>() {
            @Override
            public void success(MovieResponse mvRes, Response response) {
                // Get your error and movies list here
                // mvRes.error;
                //mvRes.movies
            }
        });
    }

}