java - 如何使用改造获取其中的数据

标签 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. API接口(interface)
  2. 改造实例和 Http 客户端(对于 header 等)
  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
            }
        });
    }

}

关于java - 如何使用改造获取其中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56044562/

相关文章:

java - 从 HashMap 中返回与今天日期匹配的键值对

java - 在 hadoop 中连接到 HDFS 时出现 EOFException

java - 安卓 : clicks on items included in the rows of a ListView not detected properly

java - 使用 Jax-Rs 在 RestApi 调用上返回用户定义的类对象时出错

java - 仅复制图像中选定的区域,而不复制边界矩形中的其他内容?

java - 如何修改List<中的对象?迭代时扩展 MyObject>?

java - SimpleCursorAdapter 未定义?

javascript - 使用 REST/SOAP/API 从 CIA World FactBook 获取信息?

android - 屏幕锁定和解锁

java - 客户端上的表同步监听器上的 Realm 对象服务器 (android)