如何使用 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"
}
]
}
答案 0 :(得分:0)
如果您查看改造文档,则需要一些帮助使其正常工作。
这是我们的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
}
});
}
}